แฒกแแฆแแแ แแจแแแแแแแกแ แแฅแแแแก แงแฃแ แแแฆแแแแก แแแฅแชแแ แฌแแแแก โLinux API. แงแแแแแกแแแแชแแแแ แกแแฎแแแแซแฆแแแแแแ โ(แฌแแแแแก แแแ แแแแแ Linux แแ แแแ แแแแ แแแแก แแแขแแ แคแแแกแ). แแแกแ แจแแแแแแ แจแแกแแซแแแแแแแ แแแแแแชแแแแแก แแแแกแแแขแแ แแ แแ แแแ แแแแแก แแแแแงแแแแแแก แจแแแแฎแแแแแจแ LinuxAPI แแแแฆแแแ 30%-แแแ แคแแกแแแแแแแแก.
แแแแแแ แแแ แฌแแแแแแแ แแแแกแแฎแแแแแแแ:
แกแแแแขแแแ: แกแแ แแแ แแก แแ แฅแแขแแฅแขแฃแ แ
แแ แแแแจแ แแแแแแฎแแแแแ แแแแแแแ แแแแแ แแ แแแ แแแแแฃแ แ แกแแ แแแ แแแแก แแแแแแแแก แกแแคแฃแซแแแแแก, แแกแแแ แกแแแชแแแแฃแ inetd แแแแแแก, แ แแแแแแช แฎแแแก แฃแฌแงแแแก แกแแ แแแ แแก แแฎแ แแแแ แแแขแแ แแแข แแแแแแแชแแแแแก แจแแฅแแแแก.
แแแแแแ แแแ แแ แแแ แแแแแฃแ แ แกแแ แแแ แแแ
แแ แกแแแแแก แแ แ แกแแแ แแ แกแแแแขแแ แแแคแฃแซแแแแฃแแ แฅแกแแแแก แกแแ แแแ แแก แแ แฅแแขแแฅแขแฃแ แ:
-
แแแแแแแ แแแแแ: แกแแ แแแ แ แแแกแแฎแฃแ แแแ แแแแแแขแแแก แแ แแแ แแฃแแแ, แฏแแ แแแฃแจแแแแแก แแแแฎแแแแแก (แแ แ แแแแแแแแ แแแแฎแแแแแก) แแ แแ แแแแแแขแแกแแแ แแ แจแแแแแ แแแแแแแก แจแแแแแแแ;
-
แแแ แแแแแฃแ แแ: แกแแ แแแ แ แจแแฅแแแแแแ แแแแกแแแแก, แ แแ แแแแแกแแฎแฃแ แแก แ แแแแแแแแ แแแแแแขแก แแ แแแ แแฃแแแ.
แกแแฅแชแแ 44.8 แฃแแแ แแแฌแแแแแฃแแแ FIFO แ แแแแแแ แแแคแฃแซแแแแฃแแ แแแแแแ แแแแก แกแแ แแแ แแก แแแแแแแแ.
แแแแแแแ แแแแแ แกแแ แแแ แแแ, แ แแแแ แช แฌแแกแ, แจแแกแแคแแ แแกแแ แแฎแแแแ แแ แกแแขแฃแแชแแแแจแ, แ แแแแกแแช แแแแแแขแแก แแแแฎแแแแแแ แจแแแซแแแแ แกแแแแแแ แกแฌแ แแคแแ แแแแฃแจแแแแแก, แ แแแแแ แแแแแแฃแ แแแแแแขแก แฃแแแ แแแแแแแแก, แกแแแแ แกแฎแแ แแแแแแขแแแก แแแแแกแแฎแฃแ แแแแแ. แแ แแแแแแแแก แกแแแ แแ แแแแแงแแแแแแก แจแแแแฎแแแแแ แแแแแแขแกแ แแ แกแแ แแแ แก แจแแ แแก แชแแแแแฃแแ แแแแฎแแแแแแแกแ แแ แแแกแฃแฎแแแแก แแแชแแแ.
แแแ แแแแแฃแ แ แกแแ แแแ แแแ แจแแกแแคแแ แแกแแ แแ แจแแแแฎแแแแแแจแ, แ แแแแกแแช แแแแแแฃแ แแแแฎแแแแแก แแแแ แแ แ แกแญแแ แแแแ แแแแฃแจแแแแแแก, แแ แแแแแแขแกแ แแ แกแแ แแแ แก แแฅแแ แจแแขแงแแแแแแแแแแก แฎแแแแ แซแแแแ แแแชแแแ. แแ แแแแจแ แฉแแแ แซแแ แแแแแแ แงแฃแ แแแฆแแแแก แแแแแแแฎแแแแแแ แแแ แแแแแฃแ แ แกแแ แแแ แแแแก แแแแแแแแก แขแ แแแแชแแฃแ (แแ แฃแแแ แขแแแแก) แแแแแ, แ แแแแแแช แแ แแก แแแแแแฃแแ แแฎแแแ แแแแแแขแแกแแแแก แชแแแแแฃแแ แแแแจแแแก แแ แแชแแกแแก แจแแฅแแแ. แแกแแแ แแ แแชแแกแ แแกแ แฃแแแแก แแแแแแขแแก แแแแกแแฎแฃแ แแแแก แแแแ แกแแแฃแจแแแก, แ แแก แจแแแแแแแช แกแ แฃแแแแแ. แแแแแแแแ แแแแแแฃแแ แแก แแ แแชแแกแ แแแแแฃแแแแแแแแ แแฃแจแแแแก, แจแแกแแซแแแแแแแ แแ แแแ แแฃแแแ แ แแแแแแแแ แแแแแแขแแก แแแแกแแฎแฃแ แแแ. แแแแแแ แ แกแแ แแแ แแก แแ แแชแแกแแก (แแจแแแแแก) แแแแแแ แ แแแแชแแแแ แแแแแแฃแแ แแฎแแแ แแแแแแขแแกแแแแก แชแแแแ แแแแจแแแก แจแแฅแแแ (แแแขแแ แแแขแแฃแแแ, แแ แแชแแกแแแแก แแแชแแแแ, แจแแแแซแแแแ แจแแฅแแแแ แจแแกแ แฃแแแแแก แซแแคแแแ).
แจแแแแแ แแแแงแแคแแแแแแแจแ แแแแแแฎแแแแแ แแแขแแ แแแข แแแแแแแก แกแแแแขแแแแ แแแคแฃแซแแแแฃแแ แแแแแแแ แแแแแ แแ แแแ แแแแแฃแ แ แกแแ แแแ แแแแก แแแแแแแแแแก. แแก แแ แ แกแแ แแแ แ แแฎแแ แชแแแแแแก แแฅแ แกแแ แแแกแแก แแแแแ แขแแแแแฃแ แแแ แกแแแก (RFC 862), แ แแแแแแช แแแ แฃแแแแก แแแแแแขแแก แแแแ แแแกแแแแก แแแแแแแแแแ แแแแแกแแแแ แ แจแแขแงแแแแแแแแก แแกแแก.
echo iteration udp แกแแ แแแ แ
แแ แแ แจแแแแแ แแแแงแแคแแแแแแจแ แฉแแแ แฌแแ แแแแแแแแแ แกแแ แแแ แแแก echo แกแแ แแแกแแกแแแแก. แแก แฎแแแแแกแแฌแแแแแแ แแแ แขแแก แแแแแ 7-แแ แแ แแฃแจแแแแก แ แแแแ แช UDP, แแกแแแ TCP-แแ (แแก แแแ แขแ แแแชแฃแแแ แแ แแแแขแแ แแฅแ แกแแ แแแ แ แฃแแแ แแงแแก แแแจแแแแฃแแ แแแแแแแกแขแ แแขแแ แแก แแ แแแแแแแแแแแ).
echo UDP แกแแ แแแ แ แแฃแแแแแแ แแแแฎแฃแแแแก แแแแแชแแแแ แแ แแแแก แแ แฃแแ แฃแแแแก แแแ แแกแแก แแแแแแแแแก. แแแแแแแแ แกแแ แแแ แก แแฎแแแแ แแ แแ แจแแขแงแแแแแแแแก แแแแฃแจแแแแแ แกแญแแ แแแแ, แแฅ แกแแแแแ แแกแ แแฅแแแแ แแแแแแแ แแแแแ แแ แฅแแขแแฅแขแฃแ แ. แกแแแแฃแ แแก แคแแแแ แกแแ แแแ แแแแกแแแแก แแแฉแแแแแแแ แกแแแจแ 56.1-XNUMX.
แฉแแแแแแแแแแ 56.1. แกแแแแฃแ แแก แคแแแแ แแ แแแ แแแแแแกแแแแก id_echo_sv.c แแ id_echo_cl.c
#include "inet_sockets.h" /* แแชแฎแแแแแก แฉแแแแ แกแแแแขแแก แคแฃแแฅแชแแแแก */
#include "tlpi_hdr.h"
#define SERVICE "echo" /* UDP แกแแ แแแกแแก แกแแฎแแแ */
#define BUF_SIZE 500 /* แแแแแชแแแแ แแ แแแแแแก แแแฅแกแแแแแฃแ แ แแแแ, แ แแแแแแช แจแแแซแแแแ แแงแแก
แจแแแซแแแแ แฌแแแแแแฎแแก แแแแแแขแ แแ แกแแ แแแ แ */
________________________________________________________________________________ แกแแแแขแแแ/id_echo.h
แฉแแแแแแแแแแ 56.2-XNUMX แแฉแแแแแแก แกแแ แแแ แแก แแแแฎแแ แชแแแแแแแก. แแฆแกแแแแจแแแแแ แจแแแแแแ แแฃแแฅแขแแแ:
-
แกแแ แแแ แแก แแแแแแแก แ แแแแแจแ แแแแแกแแงแแแแแ, แแแงแแแแแ 37.2 แแแแงแแคแแแแแแก beneDaemon() แคแฃแแฅแชแแแก;
-
แแ แแแ แแแ แฃแคแ แ แแแแแแฅแขแฃแ แ แ แแ แแแแฎแแแแ, แแแงแแแแแ 55.12 แแแแงแแคแแแแแแจแ แจแแแฃแจแแแแแฃแ แแแขแแ แแแข แแแแแแแก แกแแแแขแแก แแแแแแแแแแแก;
-
แแฃ แกแแ แแแ แ แแแ แฃแแ แฃแแแแก แแแกแฃแฎแก แแแแแแขแก, แแก แฌแแ แก แจแแขแงแแแแแแแแก แแฃแ แแแแจแ syslog() แแแ แแก แแแแแงแแแแแแ.
แ แแแแฃแ แแแแแแแชแแแจแ, แฉแแแ แแแแ แแแแแแแแแ แแแแแฌแแกแแแ แแแ แแแแฃแ แจแแแฆแฃแแแแก syslog()-แแก แแแแแงแแแแแแ แจแแขแงแแแแแแแแแแก แแฆแ แแชแฎแแแก แกแแฎแจแแ แแแ. แแก แแแแแ แแชแฎแแแก แแแแแแแกแฎแแแแแก แแแแ แกแแกแขแแแแก แแฃแ แแแแแก แแแแแคแแ แแแก แจแแกแแซแแแแแแแแก. แแกแแแ, แแแแแแแแแกแฌแแแแ, แ แแ แแแแแแฃแแ syslog() แแแ แ แกแแแแแแ แซแแแ แแ, แ แแแแแ แแก แแงแแแแแก fsync() แแแแฃแแแกแฎแแแแแ.
แฉแแแแแแแแแแ 56.2. แแแแแแแ แแแแแ แกแแ แแแ แ, แ แแแแแแช แแฎแแ แชแแแแแแก echo UDP แกแแ แแแกแก
_________________________________________________________________ แกแแแแขแแแ/id_echo_sv.c
#แจแแแชแแแก
#include "id_echo.h"
#include "become_daemon.h"
int
แแแแแแ แ (int argc, char *argv[])
{
int sfd;
ssize_t numRead;
socklen_tlen;
struct sockaddr_storage claddr;
แฉแแ แแฃแคแ[BUF_SIZE];
char adrStr[IS_ADDR_STR_LEN];
แแฃ (แแแฎแแ Daemon(0) == -1)
errExit ("แแแฎแแ Daemon");
sfd = inetBind(SERVICE, SOCK_DGRAM, NULL);
แแฃ (sfd == -1) {
syslog(LOG_ERR, "แแแ แจแแแฅแแแ แกแแ แแแ แแก แกแแแแขแ (%s)",
แกแขแ แแ แแ แ (แจแแชแแแแ));
แแแกแแแ (EXIT_FAILURE);
/* แแแแฆแแ แแแแแชแแแแ แแ แแแแแ แแ แแแแแ แฃแแแ แแกแแแแ แแแแแแแแแแกแแแแก */
}
for(;;) {
len = sizeof(struct sockaddr_storage);
numRead = recvfrom(sfd, buf, BUF_SIZE, 0, (struct sockaddr *) &claddr, &len);
แแฃ (numRead == -1)
errExit ("recvfrom");
if (sendto(sfd, buf, numRead, 0, (struct sockaddr *) &claddr, len)
!=numRead)
syslog(LOG_WARNING, "แจแแชแแแแ %s-แแ แแแกแฃแฎแแก แแแแแแ แแแแกแแก (%s)",
inetAddressStr((struct sockaddr *) &claddr, len,
addrStr, IS_ADDR_STR_LEN),
แกแขแ แแ แแ แ (แจแแชแแแแ));
}
}
_________________________________________________________________ แกแแแแขแแแ/id_echo_sv.c
แฉแแแ แแแงแแแแแ แแ แแแ แแแแก 56.3 แกแแแจแ แกแแ แแแ แแก แจแแกแแแแฌแแแแแแ. แแก แแกแแแ แแงแแแแแก แแแขแแ แแแข แแแแแแแก แกแแแแขแแก แแแแแแแแแแแก, แ แแแแแแช แจแแแฃแจแแแแแฃแแแ 55.12 แแแแงแแคแแแแแแจแ. แแแแแแขแแก แแ แแแ แแแ แแ แซแแแแแแก แกแขแ แแฅแแแแ แแแ แแแ แแ แแฃแแแแขแแ แแฆแแแก แฅแกแแแแก แฐแแกแขแแก แกแแฎแแแก, แกแแแแช แกแแ แแแ แ แแแแแแ แแแแก. แแแแแแขแ แจแแแแแแก แแแ แงแฃแแจแ, แกแแแแช แแแแแแแแก แแแแแแฃแ แแแ แฉแแแแ แแ แแฃแแแแขแก แกแแ แแแ แแ แชแแแแแฃแแ แแแขแแแ แแแแแแก แกแแฎแแ, แจแแแแแ แแ แแแแฎแฃแแแแก แแ แแแกแฃแฎแแ แแแแแกแชแแแก แกแแ แแแ แแแแ แแแฆแแแฃแ แแแแแชแแแแ แแ แแแแก.
แฉแแแแแแแแแแ 56.3. แแแแแแขแ echo UDP แกแแ แแแกแแกแแแแก
#include "id_echo.h"
int
แแแแแแ แ (int argc, char *argv[])
{
int sfd,j;
แแแแ_แขแแแ;
ssize_t numRead;
แฉแแ แแฃแคแ[BUF_SIZE];
if (argc < 2 || strcmp(argv[1], "--help") == 0)
usageErr("%s แแแกแแแแซแแแ msgโฆn", argv[0]);
/* แจแแฅแแแแแ แกแแ แแแ แแก แแแกแแแแ แแ แแแ แแแแ แแ แซแแแแแแก แแ แแฃแแแแขแแก แกแแคแฃแซแแแแแ */
sfd = inetConnect(argv[1], SERVICE, SOCK_DGRAM);
แแฃ (sfd == -1)
fatal ("แแแ แแแแแแจแแ แแแ แกแแ แแแ แแก แกแแแแขแแแ");
/* แแแแแ แฉแแแ แแ แแฃแแแแขแแแแก แแแแแแแแ แกแแ แแแ แแ แชแแแแ แแแแแชแแแแ แแ แแแแแแก แกแแฎแแ */
for (j = 2; j < argc; j++) {
len = strlen(argv[j]);
แแฃ (แแแฌแแ แแ(sfd, argv[j], len) != len)
แกแแแแแแกแฌแแ แ ("แแแฌแแแแแ แแแ / แฌแแ แฃแแแขแแแแแ แฉแแฌแแ แ");
numRead = แฌแแแแแฎแแ (sfd, buf, BUF_SIZE);
แแฃ (numRead == -1)
errExit ("แฌแแแแแฎแแ");
printf("[%ld bytes] %.*sn", (long) numRead, (int) numRead, buf);
}
แแแกแแแ (EXIT_SUCCESS);
}
_________________________________________________________________ แกแแแแขแแแ/id_echo_cl.c
แจแแแแแแ แแ แแก แแแแแแแแ แแแแกแ, แ แแกแแช แฉแแแ แแแแแแแฎแแแ แกแแ แแแ แแก แแ แแ แ แแแแแแขแแก แแแกแขแแแชแแแก แแแจแแแแแกแแก:
$ su // แแแแแฎแแแก แแ แแแแแแแแแแก แ แแแแ แแแแฃแ แแแ แขแแแ แแแกแแแแแจแแ แแแแแ
แแแ แแแ:
# ./id_echo_sv // แกแแ แแแ แ แแแแแแแก แคแแแแ
# แแแกแแแ // แแแแแแแกแขแ แแขแแ แแก แฃแคแแแแแแแก แแแแแแแ
$ ./id_echo_cl localhost hello world // แแก แแแแแแขแ แแแแแแแแก แแ แแแแแชแแแแแแ แแแแก
[5 แแแแขแ] แแแแแ แฏแแแ // แแแแแแขแ แแแแแกแชแแแก แกแแ แแแ แแแแ แแแฆแแแฃแ แแแกแฃแฎแก
[5 แแแแขแ] แกแแแงแแ แ
$ ./id_echo_cl localhost แแแฎแแแแแแก // แแก แแแแแแขแ แแแแแแแแก แแ แ แแแแแชแแแแแแ แแแแก
[7 แแแแขแ] แแแฎแแแแแแก
แกแแกแแแแแแแ แแแแฎแแแก แแแกแฃแ แแแแ)
แฌแงแแ แ: linux.org.ru