Akwụkwọ Linux API. Nduzi zuru oke»


Akwụkwọ Linux API. Nduzi zuru oke»

Ehihie ọma M na-ewetara gị akwụkwọ bụ “Linux API. Nduzi zuru oke "( nsụgharị nke akwụkwọ Ngwa ngwa Linux Programming Interface). Enwere ike ịnye ya iwu na webụsaịtị onye mbipụta, yana ọ bụrụ na itinye koodu nkwado LinuxAPI ị ga-enweta mbelata 30%.

Ederede si n'akwụkwọ ahụ maka ntụleghachi:

Sockets: ihe nkesa ije

N'isiakwụkwọ a, anyị ga-atụle isi ihe dị n'ichepụta ihe nkesa na ihe nkesa, yana inetd daemon pụrụ iche nke na-eme ka ịmepụta ngwa ịntanetị n'akụkụ sava.

Iteration na Parallel Sava

Enwere ụlọ ihe nkesa netwọkụ dabere na oghere abụọ:

  • iterative: ihe nkesa na-ejere ndị ahịa ozi n'otu n'otu, buru ụzọ hazie arịrịọ (ma ọ bụ ọtụtụ arịrịọ) nke otu onye ahịa wee gaa n'ihu na-esote;

  • yiri: emebere ihe nkesa ahụ iji jeere ọtụtụ ndị ahịa ozi n'otu oge.

Nkeji 44.8 enyelarị ihe atụ nke ihe nkesa iteration dabere na ahịrị FIFO.

Sava iteration na-adịkarị mma naanị n'ọnọdụ ebe enwere ike ịhazi arịrịọ ndị ahịa ngwa ngwa, n'ihi na onye ahịa ọ bụla ga-echere ruo mgbe ewepụtara ndị ahịa ọ bụla ọzọ n'ihu ya. Okwu a na-ejikarị eme ihe maka ụzọ a bụ ịgbanwe otu arịrịọ na nzaghachi n'etiti onye ahịa na ihe nkesa.

Sava ndị yiri ya dabara adaba n'ọnọdụ ebe arịrịọ ọ bụla na-ewe oge dị ukwuu iji hazie, ma ọ bụ onye ahịa na ihe nkesa nwere ogologo mgbanwe ozi. N'isiakwụkwọ a, anyị ga-elekwasị anya na ụzọ ọdịnala (ma kachasị mfe) iji chepụta sava ndị yiri ya, nke bụ ịmepụta usoro ụmụaka dị iche iche maka onye ahịa ọhụrụ ọ bụla. Usoro dị otú ahụ na-arụ ọrụ niile nke ijere onye ahịa ozi, mgbe nke ahụ gasịrị, ọ kwụsịrị. Ebe ọ bụ na nke ọ bụla n'ime usoro ndị a na-arụ ọrụ n'onwe ya, ọ ga-ekwe omume ijere ọtụtụ ndị ahịa ozi n'otu oge. Ọrụ bụ isi nke usoro ihe nkesa bụ isi (nne na nna) bụ ịmepụta nwa dị iche iche maka onye ahịa ọhụrụ ọ bụla (n'aka nke ọzọ, kama usoro, ị nwere ike ịmepụta eri nke ogbugbu).

N'akụkụ ndị a, anyị ga-eleba anya n'ihe atụ nke ihe nkesa na ihe ndị yiri ya dabere na oghere ngalaba ịntanetị. Sava abụọ a na-emejuputa ụdị ọrụ echo dị mfe (RFC 862) nke na-eweghachi otu ozi ọ bụla onye ahịa zitere ya.

echo iteration udp nkesa

Na nke a na ngalaba na-esote, anyị ga-ewebata sava maka ọrụ echo. Ọ dị na nọmba ọdụ ụgbọ mmiri 7 ma na-arụ ọrụ ma n'elu UDP na TCP (edobere ọdụ ụgbọ mmiri a, ya mere ihe nkesa echo ga-eji ikike nchịkwa mee ihe).

Ihe nkesa Echo UDP na-agụ datagram mgbe niile wee weghachi onye zitere ya otu n'ime ha. Ebe ọ bụ na ihe nkesa ahụ kwesịrị ịhazi naanị otu ozi n'otu oge, usoro nhazi oge ga-ezuru ebe a. Egosiri faịlụ nkụnye eji isi mee maka sava na Ndepụta 56.1-XNUMX.

Ndepụta 56.1. Faịlụ nkụnye eji isi mee maka mmemme id_echo_sv.c na id_echo_cl.c

#gụnyere "inet_sockets.h" /* Na-ekwupụta ọrụ oghere anyị */
#gụnye "tlpi_hdr.h"

# kọwapụta SERVICE "echo" /* aha ọrụ UDP */

# kọwaa BUF_SIZE 500 /* Oke datagram nke ahụ
onye ahịa na ihe nkesa nwere ike ịgụ */
___________________________________________________________ sọket/id_echo.h

Ndepụta 56.2-XNUMX na-egosi mmejuputa nkesa. Okwesiri iburu n'uche ihe ndia:

  • iji tinye ihe nkesa na ọnọdụ daemon, anyị na-eji ọrụ ghọọDaemon () site na Nkebi 37.2;

  • iji mee ka mmemme ahụ dịkwuo kọmpat, anyị na-eji ụlọ akwụkwọ ntanetịime ngalaba oghere emepụtara na ngalaba 55.12;

  • Ọ bụrụ na ihe nkesa enweghị ike ịghachite nzaghachi nye onye ahịa, ọ na-ede ozi na log site na iji oku syslog ().

N'ime ngwa n'ezie, anyị ga-amanye oke na ugboro ole ozi ndekọ site na iji syslog(). Nke a ga-ewepụ ohere nke onye na-awakpo ga-ejupụta na ndekọ usoro. Ọzọkwa, buru n'uche na oku syslog() ọ bụla dị oke ọnụ, ebe ọ na-eji fsync() na ndabara.

Ndepụta 56.2. Ihe nkesa iteration nke na-arụ ọrụ echo UDP

__________________________________________________ sockets/id_echo_sv.c
#gụnye
#gụnye "id_echo.h"
#gụnyere "aghọ_daemon.h"

Int
isi (int argc, char *argv[])
{
int sfd;
size_t numRead;
socklen_tlen;
struct sockaddr_storage claddr;
charbuf[BUF_SIZE];
char addrStr[IS_ADDR_STR_LEN];

ọ bụrụ na (bụ Daemon (0) == -1)
errExit ("aghọDaemon");

sfd = inetBind (Ọrụ, SOCK_DGRAM, NULL);
ọ bụrụ (sfd == -1) {
syslog (LOG_ERR, "Enweghị ike ịmepụta oghere nkesa (%s)",
strok (errno));
ọpụpụ(EXIT_FAILURE);

/* Nata datagram ma weghachi ndị na-ezipụ akwụkwọ ozi */
}
maka (;;) {
len = sizeof (usoro sockaddr_storage);
numRead = recvfrom (sfd, buf, BUF_SIZE, 0, (struct sockaddr *) & claddr, & len);

ọ bụrụ na (numRead == -1)
errExit ("recvfrom");
ọ bụrụ (sendto (sfd, buf, numRead, 0, (struct sockaddr *) & claddr, len)
!=numRead)
syslog (LOG_WARNING, "Emehie na-azaghachi nzaghachi na %s (%s)",
inetAddressStr ((ụdị sockaddr *) & claddr, oghere,
addrStr, IS_ADDR_STR_LEN),
strok (errno));
}
}
__________________________________________________ sockets/id_echo_sv.c

Anyị na-eji mmemme na ndepụta 56.3 iji nwalee ihe nkesa. Ọ na-ejikwa ọba akwụkwọ oghere ngalaba ịntanetị emepụtara na ngalaba 55.12. Mmemme ndị ahịa na-ewere aha netwọkụ netwọkụ ebe ihe nkesa dị dị ka arụmụka mbụ na ahịrị iwu. Onye ahịa ahụ na-abanye na akaghị ebe ọ na-ezigara arụmụka ọ bụla fọdụrụ na ihe nkesa dị ka datagram dị iche iche, wee gụọ ma wepụ datagrams natara site na ihe nkesa na nzaghachi.

Ndepụta 56.3. Onye ahịa maka ọrụ echo UDP

#gụnye "id_echo.h"

Int
isi (int argc, char *argv[])
{
int sfd,j;
size_tlen;
size_t numRead;
charbuf[BUF_SIZE];

ọ bụrụ (argc <2 || strcmp (argv[1], "--enyere aka") == 0)
usageErr("%s host msg…n", argv[0]);

/* Dezie adreesị nkesa dabere na arụmụka ahịrị iwu mbụ */
sfd = inetConnect (argv [1], SERVICE, SOCK_DGRAM);
ọ bụrụ (sfd == -1)
egbu ("Enweghị ike ijikọ na oghere ihe nkesa");

/* Zipu arụmụka ndị ọzọ na ihe nkesa dị ka datagram dị iche iche */
maka (j = 2; j < argc; j++) {
len = strlen (argv[j]);
ọ bụrụ (dee (sfd, argv[j], len)!= len)
egbu egbu ("dere akụkụ/ dara ada");

numRead = gụọ (sfd, buf, BUF_SIZE);
ọ bụrụ na (numRead == -1)
errExit ("gụọ");
printf("[%ld bytes] %*sn", (ogologo) numRead, (int) numRead, buf);
}
ọpụpụ(EXIT_SUCCESS);
}
__________________________________________________ sockets/id_echo_cl.c

Ihe na-esonụ bụ ọmụmaatụ nke ihe anyị ga-ahụ mgbe anyị malitere ihe nkesa na ndị ahịa abụọ:

$ su // Chọrọ ihe ùgwù ijikọ n'ọdụ ụgbọ mmiri echekwara
Paswọọdụ:
# ./id_echo_sv // Ihe nkesa na-abanye n'azụ
# ọpụpụ // Wepụ ikike nchịkwa
$ ./id_echo_cl localhost ndewo ụwa // Onye ahịa a na-eziga datagram abụọ
[5 bytes] ndewo // Onye ahịa na-ewepụta nzaghachi natara n'aka nkesa
[5 bytes] ụwa
$ ./id_echo_cl localhost goodbye // Onye ahịa a na-eziga otu datagram
[7 bytes] daalụ

Achọrọ m gị ịgụ akwụkwọ mara mma)

isi: linux.org.ru