- ЋзҐаҐ¤Ё б®®ЎйҐЁ©
- Ѓ §®ўлҐ ЇаЁжЁЇл
- ‚гв२Ґ Ё Ї®«м§®ў ⥫мбЄЁҐ бвагЄвгал ¤ ле
- ЃгдҐа б®®ЎйҐЁп
- ‘вагЄвга msg п¤а
- ‘вагЄвга msqid_ds п¤а
- ‘вагЄвга ipc_perm п¤а
- ‘ЁбвҐ¬л© ўл§®ў msgget()
- ‘ЁбвҐ¬л© ўл§®ў msgsnd()
- ‘ЁбвҐ¬л© ўл§®ў msgrcv()
- ‘ЁбвҐ¬л© ўл§®ў msgctl()
- msgtool: ЁвҐа ЄвЁўл© ®Ўа Ў®взЁЄ ®зҐаҐ¤Ґ© б®®ЎйҐЁ©
- ЋЇЁб ЁҐ
- ‘Ёв ЄбЁб Є®¬ ¤®© бва®ЄЁ
ЋзҐаҐ¤Ё б®®ЎйҐЁ©
Ѓ §®ўлҐ ЇаЁжЁЇл
ЋзҐаҐ¤Ё б®®ЎйҐЁ© ЇаҐ¤бв ў«пов б®Ў®© бўп§л© бЇЁб®Є ў ¤аҐб®¬ Їа®бва б⢥ п¤а . ‘®®ЎйҐЁп ¬®Јгв Ї®бл« вмбп ў ®зҐаҐ¤м Ї® Ї®ап¤Єг Ё ¤®бв ў вмбп Ё§ ®зҐаҐ¤Ё ҐбЄ®«мЄЁ¬Ё а §л¬Ё Їгвп¬Ё. Љ ¦¤ п ®зҐаҐ¤м б®®ЎйҐЁ© ®¤®§ з® ®ЇаҐ¤Ґ«Ґ Ё¤ҐвЁдЁЄ в®а®¬ IPC .
‚гв२Ґ Ё Ї®«м§®ў ⥫мбЄЁҐ бвагЄвгал ¤ ле
Љ«о箬 Є Ї®«®¬г ®б®§ Ёо в Є®© б«®¦®© бЁб⥬л, Є Є System V IPC , пў«пҐвбп Ў®«ҐҐ вҐб®Ґ § Є®¬бвў® б а §«Ёзл¬Ё бвагЄвга ¬Ё ¤ ле, Є®в®алҐ «Ґ¦ в ўгваЁ б ¬®Ј® п¤а . „ ¦Ґ ¤«п Ў®«миЁбвў ЇаЁ¬ЁвЁўле ®ЇҐа жЁ© Ґ®Ўе®¤Ё¬ Їаאַ© ¤®бвгЇ Є ҐЄ®в®ал¬ Ё§ нвЁе бвагЄвга, е®вп ¤агЈЁҐ ЁбЇ®«м§говбп в®«мЄ® Ј®а §¤® Ў®«ҐҐ Ё§Є®¬ га®ўҐ.
ЃгдҐа б®®ЎйҐЁп
ЏҐаў®© бвагЄвга®©, Є®в®аго ¬л а бᬮваЁ¬, Ўг¤Ґв msgbuf . …Ј® ¬®¦® Ї®Ё¬ вм Є Є и Ў«® ¤«п ¤ ле б®®ЎйҐЁп. Џ®бЄ®«мЄг ¤ лҐ ў б®®ЎйҐЁЁ Їа®Ја ¬¬Ёбв ®ЇаҐ¤Ґ«пҐв б ¬, ® ®Ўп§ Ї®Ё¬ вм, зв® б ¬®¬ ¤Ґ«Ґ ®Ё пў«повбп бвагЄвга®© msgbuf . …Ј® ®ЇЁб ЁҐ 室Ёвбп ў
- type — ’ЁЇ б®®ЎйҐЁп, ЇаҐ¤бв ў«Ґл© вга «мл¬ зЁб«®¬. Ћ ®Ўп§ Ўлвм вга «мл¬!
- mtext — ‘®Ўб⢥® б®®ЎйҐЁҐ.
‚®§¬®¦®бвм ЇаЁЇЁблў вм вЁЇ Є®ЄаҐв®¬г б®®ЎйҐЁо Ї®§ў®«пҐв ¤Ґа¦ вм ў ®¤®© ®зҐаҐ¤Ё а §®а®¤лҐ б®®ЎйҐЁп. ќв® ¬®¦Ґв Ї® ¤®ЎЁвмбп, ЇаЁ¬Ґа, Є®Ј¤ б®®ЎйҐЁп Їа®жҐбб -Є«ЁҐв Ї®¬Ґз овбп ®¤Ё¬ ¬ ЈЁзҐбЄЁ¬ зЁб«®¬, б®®ЎйҐЁп б®®ЎйҐЁп Їа®жҐбб -бҐаўҐа — ¤агЈЁ¬; Ё«Ё ЇаЁ«®¦ҐЁҐ бв ўЁв ў ®зҐаҐ¤м б®®ЎйҐЁп ®Ў ®иЁЎЄ е б вЁЇ®¬ 1, б®®ЎйҐЁп-§ Їа®бл — б вЁЇ®¬ 2 Ё в.¤. ‚ иЁ ў®§¬®¦®бвЁ Їа®бв® ЎҐ§Ја Ёзл.
‘ ¤агЈ®© бв®а®л, бв а ©вҐбм ¤ вм Ј«п¤®Ґ Ё¬п н«Ґ¬Ґвг ¤ ле б®®ЎйҐЁп (ў ЇаЁ¬ҐаҐ Ўл« mtext ). ‚ нв® Ї®«Ґ ¬®¦® § ЇЁблў вм Ґ в®«мЄ® ¬ ббЁўл «ЁвҐа, ® Ё ў®®ЎйҐ «оЎлҐ ¤ лҐ ў «оЎ®© д®а¬Ґ. Џ®«Ґ ¤Ґ©бвўЁвҐ«м® Ї®«®бвмо Їа®Ё§ў®«м®, Ї®н⮬㠢бп бвагЄвга ¬®¦Ґв Ўлвм ЇҐаҐ®ЇаҐ¤Ґ«Ґ Їа®Ја ¬¬Ёб⮬, ЇаЁ¬Ґа, в Є:
‡¤Ґбм ¬л в Є¦Ґ ўЁ¤Ё¬ бвагЄвгаг б®®ЎйҐЁп, ® ўв®а®© н«Ґ¬Ґв § ¬ҐЁ«бп ¤ў , ЇаЁзҐ¬ ®¤Ё Ё§ Ёе — ¤агЈ п бвагЄвга ! ‚ н⮬ ЇаҐ«Ґбвм ®зҐаҐ¤Ґ© б®®ЎйҐЁ©, п¤а® Ґ а §ЎЁа Ґв ¤ лҐ, Є ЄЁ¬Ё Ўл ®Ё Ё Ўл«Ё.
‘гйҐбвўгҐв, ®¤ Є®, ®Ја ЁзҐЁҐ ¬ ЄбЁ¬ «мл© а §¬Ґа б®®ЎйҐЁп. ‚ LINUX ® ®ЇаҐ¤Ґ«Ґ ў
:
‘®®ЎйҐЁп Ґ ¬®Јгв Ўлвм Ў®«миҐ, 祬 4056 Ў ©в, бо¤ ўе®¤Ёв Ё н«Ґ¬Ґв mtype , Є®в®ал© § Ё¬ Ґв 4 Ў ©в (long).
‘вагЄвга msg п¤а
џ¤а® еа Ёв б®®ЎйҐЁҐ ў ®зҐаҐ¤Ё бвагЄвгал msg . Ћ ®ЇаҐ¤Ґ«Ґ ў
- msg_next — “Є § ⥫м б«Ґ¤го饥 б®®ЎйҐЁҐ ў ®зҐаҐ¤Ё. ‘®®ЎйҐЁп ®ЎкҐ¤ЁҐл ў ®¤®бўп§л© бЇЁб®Є Ё 室пвбп ў ¤аҐб®¬ Їа®бва б⢥ п¤а .
- msg_type — ’ЁЇ б®®ЎйҐЁп, Є ЄЁ¬ ® Ўл« ®Ўкпў«Ґ ў msgbuf .
- msg_spot — “Є § ⥫м з «® ⥫ б®®ЎйҐЁп.
- msg_ts — „«Ё ⥪бв (Ё«Ё ⥫ ) б®®ЎйҐЁп.
‘вагЄвга msqid_ds п¤а
Љ ¦¤л© Ё§ ваҐе вЁЇ®ў IPC -®ЎкҐЄв®ў Ё¬ҐҐв ўгв॥Ґ ЇаҐ¤бв ў«ҐЁҐ, Є®в®а®Ґ Ї®¤¤Ґа¦Ёў Ґвбп п¤а®¬. „«п ®зҐаҐ¤Ґ© б®®ЎйҐЁ© нв® бвагЄвга msqid_ds . џ¤а® б®§¤ Ґв, еа Ёв Ё б®Їа®ў®¦¤ Ґв ®Ўа §Ґж в Є®© бвагЄвгал ¤«п Є ¦¤®© ®зҐаҐ¤Ё б®®ЎйҐЁ© ў бЁб⥬Ґ. Ћ ®ЇаҐ¤Ґ«Ґ ў
б«Ґ¤гойЁ¬ ®Ўа §®¬:
•®вп Ў®«миЁбвў® н«Ґ¬Ґв®ў нв®© бвагЄвгал ў б Ўг¤Ґв ¬ «® ў®«®ў вм, ¤«п Є Є®©-в® § Є®зҐ®бвЁ ¬л ўЄа вжҐ Ї®пбЁ¬ Є ¦¤л©.
- msg_perm — ќЄ§Ґ¬Ї«па бвагЄвгал ipc_perm , ®ЇаҐ¤Ґ«Ґ®© ў
- . Ћ ᮤҐа¦Ёв Ёд®а¬ жЁо ® ¤®бвгЇҐ ¤«п ®зҐаҐ¤Ё б®®ЎйҐЁ©, ўЄ«оз п Їа ў ¤®бвгЇ Ё Ёд®а¬ жЁо ® б®§¤ ⥫Ґ б®®ЎйҐЁп ( uid Ё в.Ї.).
- msg_first — ‘бл«Є ЇҐаў®Ґ б®®ЎйҐЁҐ ў ®зҐаҐ¤Ё (Ј®«®ў бЇЁбЄ ).
- msg_last — ‘бл«Є Ї®б«Ґ¤Ё© н«Ґ¬Ґв бЇЁбЄ (еў®бв бЇЁбЄ ).
- msg_stime — Њ®¬Ґв ўаҐ¬ҐЁ Ї®бл«ЄЁ Ї®б«Ґ¤ҐЈ® б®®ЎйҐЁп Ё§ ®зҐаҐ¤Ё.
- msg_rtime — Њ®¬Ґв ўаҐ¬ҐЁ Ї®б«Ґ¤ҐЈ® Ё§кпвЁп н«Ґ¬Ґв Ё§ ®зҐаҐ¤Ё.
- msg_ctime — Њ®¬Ґв ўаҐ¬ҐЁ Ї®б«Ґ¤ҐЈ® Ё§¬ҐҐЁп, Їа®¤Ґ« ®Ј® ў ®зҐаҐ¤Ё (Ї®¤а®ЎҐҐ ®Ў н⮬ Ї®§¦Ґ).
- wwait Ё rwait — “Є § ⥫Ё ў ®зҐаҐ¤м ®¦Ё¤ Ёп п¤а . ЋЁ ЁбЇ®«м§говбп, Є®Ј¤ ®ЇҐа жЁп ¤ ®зҐаҐ¤мо б®®ЎйҐЁ© ЇҐаҐў®¤Ёв Їа®жҐбб ў б®бв®пЁҐ бЇпзЄЁ (в® Ґбвм ®зҐаҐ¤м ЇҐаҐЇ®«Ґ , Ё Їа®жҐбб ¦¤Ґв ®вЄалвЁп).
- msg_cbytes — —Ёб«® Ў ©в, бв®пйЁе ў ®зҐаҐ¤Ё (б㬬 ал© а §¬Ґа ўбҐе б®®ЎйҐЁ©).
- msg_qnum — Љ®«ЁзҐбвў® б®®ЎйҐЁ© ў ®зҐаҐ¤Ё бв®пйЁ© ¬®¬Ґв.
- msg_qbytes — Њ ЄбЁ¬ «мл© а §¬Ґа ®зҐаҐ¤Ё.
- msg_lspid — PID Їа®жҐбб , Ї®б« ўиҐЈ® Ї®б«Ґ¤ҐҐ ў ®зҐаҐ¤Ё б®®ЎйҐЁҐ.
- msg_lrpid — PID Ї®б«Ґ¤ҐЈ® Їа®жҐбб , ў§пўиҐЈ® Ё§ ®зҐаҐ¤Ё б®®ЎйҐЁҐ.
‘вагЄвга ipc_perm п¤а
€д®а¬ жЁо ® ¤®бвгЇҐ Є IPC-®ЎкҐЄв ¬ п¤а® еа Ёв ў бвагЄвгॠipc_perm . Ќ ЇаЁ¬Ґа, ®ЇЁб п ўлиҐ бвагЄвга ®зҐаҐ¤Ё б®®ЎйҐЁ© ᮤҐа¦Ёв ®¤г бвагЄвгаг вЁЇ ipc_perm ў Є зҐб⢥ н«Ґ¬Ґв . ‘«Ґ¤го饥 ҐҐ ®ЇаҐ¤Ґ«ҐЁҐ ¤ ® ў
.
‚ᥠЇаЁўҐ¤Ґ®Ґ ўлиҐ Ј®ў®аЁв б ¬® § ᥡп. ‘®еа 塞 п ®в¤Ґ«м® ў¬ҐбвҐ б Є«о箬 IPC-®ЎкҐЄв Ёд®а¬ жЁп ᮤҐа¦Ёв ¤ лҐ ® ў« ¤Ґ«мжҐ Ё б®§¤ ⥫Ґ нв®Ј® ®ЎкҐЄв (®Ё ¬®Јгв а §«Ёз вмбп). ђҐ¦Ё¬л ў®б쬥аЁз®Ј® ¤®бвгЇ в Є¦Ґ еа пвбп §¤Ґбм, Є Є unsigned short. Ќ Є®Ґж, б®еа пҐвбп Ї®ап¤Є®ўл© ®¬Ґа ЁбЇ®«м§®ў Ёп ЈҐ§¤ . Љ ¦¤л© а § Є®Ј¤ IPC ®ЎкҐЄв § Єалў Ґвбп зҐаҐ§ бЁбвҐ¬л© ўл§®ў (гЁз⮦ Ґвбп), нв®в ®¬Ґа 㬥ми Ґвбп ¬ ЄбЁ¬ «м®Ґ зЁб«® ®ЎкҐЄв®ў IPC, Є®в®алҐ ¬®Јгв 室Ёвмбп ў бЁб⥬Ґ. Љ б Ґвбп ў б нв® § 票Ґ? ЌҐв.
‘ЁбвҐ¬л© ўл§®ў msgget()
‘ЁбвҐ¬л© ўл§®ў msgget() 㦥 ¤«п в®Ј®, зв®Ўл б®§¤ вм ®зҐаҐ¤м б®®ЎйҐЁ© Ё«Ё Ї®¤Є«озЁвмбп Є бгйҐбвўго饩.
PROTOTYPE: int msgget( key_t key, int msgflg );
RETURNS: Ё¤ҐвЁдЁЄ в®а ®зҐаҐ¤Ё б®®ЎйҐЁ© ў б«гз Ґ гбЇҐе ; -1 ў б«гз Ґ ®иЁЎЄЁ.
ЏҐаўл© аЈг¬Ґв msgget() § 票Ґ Є«оз (¬л ҐЈ® Ї®«гз Ґ¬ ЇаЁ Ї®¬®йЁ ftok() ). ќв®в Є«оз ба ўЁў Ґвбп б Є«оз ¬Ё 㦥 бгйҐбвўгойЁе ў п¤аҐ ®зҐаҐ¤Ґ©. ЏаЁ н⮬ ®ЇҐа жЁп ®вЄалвЁп Ё«Ё ¤®бвгЇ Є ®зҐаҐ¤Ё § ўЁбЁв ®в ᮤҐа¦Ё¬®Ј® аЈг¬Ґв msgflg :
- IPC_CREAT — ‘®§¤ Ґв ®зҐаҐ¤м, Ґб«Ё ® Ґ Ўл« б®§¤ а ҐҐ.
- IPC_EXCL — ЏаЁ ЁбЇ®«м§®ў ЁЁ б®ў¬Ґбв® б IPC_CREAT , ЇаЁў®¤Ёв Є Ґг¤ зҐ Ґб«Ё ®зҐаҐ¤м 㦥 бгйҐбвўгҐв.
‚л§®ў msgget() б IPC_CREAT , ® ЎҐ§ IPC_EXCL ўбҐЈ¤ ўл¤ Ґв Ё¤ҐвЁдЁЄ в®а (бгйҐбвўго饩 б в ЄЁ¬ Є«о箬 Ё«Ё б®§¤ ®©) ®зҐаҐ¤Ё. €бЇ®«м§®ў ЁҐ IPC_EXCL ў¬Ґб⥠б IPC_CREAT «ЁЎ® б®§¤ Ґв ®ўго ®зҐаҐ¤м, «ЁЎ®, Ґб«Ё ®зҐаҐ¤м 㦥 бгйҐбвўгҐв, § Є зЁў Ґвбп Ґг¤ зҐ©. ‘ ¬®бв®пвҐ«м® IPC_EXCL ЎҐбЇ®«Ґ§Ґ, ® ў¬Ґб⥠c IPC_CREAT ® ¤ Ґв Ј а вЁо, зв® Ё ®¤ Ё§ бгйҐбвўгойЁе ®зҐаҐ¤Ґ© Ґ ®вЄалў Ґвбп ¤«п ¤®бвгЇ .
‚®б쬥аЁзл© аҐ¦Ё¬ ¬®¦Ґв Ўлвм OR-гв ў ¬ бЄг ¤®бвгЇ . Љ ¦¤л© IPC-®ЎкҐЄв Ё¬ҐҐв Їа ў ¤®бвгЇ , «®ЈЁзлҐ Їа ў ¬ ¤®бвгЇ Є д ©«г ў д ©«®ў®© бЁб⥬Ґ UNIX- .
Ќ ЇЁиҐ¬ ®ЎҐав®зго дгЄжЁо ¤«п ®вЄалвЁп Ё«Ё б®§¤ Ёп ®зҐаҐ¤Ё б®®ЎйҐЁ©.
Ћв¬Ґвм⥠ЁбЇ®«м§®ў ЁҐ в®з®Ј® ®Ја ЁзЁвҐ«п ¤®бвгЇ 0660. ќв ҐЎ®«ми п дгЄжЁп ў®§ўа й Ґв Ё¤ҐвЁдЁЄ в®а ®зҐаҐ¤Ё (int) Ё«Ё -1 ў б«гз Ґ ®иЁЎЄЁ. …¤ЁбвўҐл© ваҐЎгҐ¬л© аЈг¬Ґв — Є«о祢®Ґ § 票Ґ.
‘ЁбвҐ¬л© ўл§®ў msgsnd()
Џ®«гзЁў Ё¤ҐвЁдЁЄ в®а ®зҐаҐ¤Ё, ¬л ¬®¦Ґ¬ ўлЇ®«пвм ¤ Ґ© а §«ЁзлҐ ¤Ґ©бвўЁп. —в®Ўл Ї®бв ўЁвм б®®ЎйҐЁҐ ў ®зҐаҐ¤м, ЁбЇ®«м§г©вҐ бЁбвҐ¬л© ўл§®ў msgsnd() :
PROTOTYPE: int msgsnd( int msqid, struct msgbuf *msgp, int msgsz, int msgflg );
RETURNS: 0 ў б«гз Ґ гбЇҐе , -1 ў б«гз Ґ ®иЁЎЄЁ:
ЏҐаўл© аЈг¬Ґв msgsnd — Ё¤ҐвЁдЁЄ в®а 襩 ®зҐаҐ¤Ё, ў®§ўа йҐл© ЇаҐ¤ў аЁвҐ«мл¬ ўл§®ў®¬ msgget . ‚в®а®© аЈг¬Ґв, msgp — нв® гЄ § ⥫м ।ҐЄ« аЁа®ў л© Ё § Јаг¦Ґл© ЎгдҐа б®®ЎйҐЁп. ЂаЈг¬Ґв msgsz ᮤҐа¦Ёв ¤«Ёг б®®ЎйҐЁп ў Ў ©в е, Ґ гзЁвлў п вЁЇ б®®ЎйҐЁп (long 4 Ў ©в ). ЂаЈг¬Ґв msgflg ¬®¦Ґв Ўлвм г«Ґ¬ Ё«Ё:
- IPC_NOWAIT — …б«Ё ®зҐаҐ¤м ЇҐаҐЇ®«Ґ , в® б®®ЎйҐЁҐ Ґ § ЇЁблў Ґвбп ў ®зҐаҐ¤м, Ё гЇа ў«ҐЁҐ ЇҐаҐ¤ Ґвбп ўл§лў о饬㠯а®жҐббг. …б«Ё нв бЁвг жЁп Ґ ®Ўа Ў влў Ґвбп ўл§лў ойЁ¬ Їа®жҐбᮬ, в® ® ЇаЁ®бв ў«Ёў Ґвбп (Ў«®ЄЁагҐвбп), Ї®Є б®®ЎйҐЁҐ Ґ Ўг¤Ґв Їа®зЁв ®.
Ќ ЇЁиҐ¬ Ґ§ ⥩«Ёўго ®ЎҐав®зго дгЄжЁо ¤«п Ї®бл«ЄЁ б®®ЎйҐЁп:
ќв дгЄжЁп Їлв Ґвбп Ї®б« вм б®®ЎйҐЁҐ, «Ґ¦ 饥 Ї® гЄ § ®¬г ¤аҐбг ( qbuf ), ў ®зҐаҐ¤м б®®ЎйҐЁ©, Ё¤ҐвЁдЁжЁа®ў го qid . Ќ ЇЁиҐ¬ ҐЎ®«миго гвЁ«Ёвг б иЁ¬Ё ¤ўг¬п ®ЎҐав®зл¬Ё дгЄжЁп¬Ё:
Џ®б«Ґ б®§¤ Ёп/®вЄалвЁп 襩 ®зҐаҐ¤Ё ЇаЁЁ¬ Ґ¬бп § § Јаг§Єг ЎгдҐа б®®ЎйҐЁп б вҐбв®ўл¬Ё ¤ л¬Ё (§ ¬Ґвм⥠®вбгвбвўЁҐ ⥪бв®ўле ¤ ле ¤«п Ё««обва жЁЁ 襣® Ї®«®¦ҐЁп ® Ї®бл«ЄҐ ¤ў®Ёз®© Ёд®а¬ жЁЁ). ‚л§®ў 襣® send_message «®ўЄ® ¤®бв ўЁв б®®ЎйҐЁҐ ў ®зҐаҐ¤м.
’ҐЇҐам, Є®Ј¤ ¬л Ё¬ҐҐ¬ б®®ЎйҐЁҐ ў ®зҐаҐ¤Ё, Ї®Їлв ©вҐбм ЇаЁ Ї®¬®йЁ ipcs Ї®б¬®ваҐвм бв вгб 襩 ®зҐаҐ¤Ё. ЋЎбг¤Ё¬, Є Є § Ўа вм Ё§ ®зҐаҐ¤Ё б®®ЎйҐЁҐ. „«п нв®Ј® ЁбЇ®«м§гҐвбп бЁбвҐ¬л© ўл§®ў msgrcv()
‘ЁбвҐ¬л© ўл§®ў msgrcv()
PROTOTYPE: int msgrcv( int msqid, struct msgbuf *msgp, int msgsz, long mtype, $$)
RETURNS: зЁб«® Ў ©в, бЄ®ЇЁа®ў ле ў ЎгдҐа б®®ЎйҐЁп, -1 ў б«гз Ґ ®иЁЎЄЁ.
Љ®Ґз®, ЇҐаўл© аЈг¬Ґв ®ЇаҐ¤Ґ«пҐв ®зҐаҐ¤м, Ё§ Є®в®а®© Ўг¤Ґв ў§пв® б®®ЎйҐЁҐ (¤®«¦Ґ Ўлвм ў®§ўа йҐ б¤Ґ« л¬ ЇаҐ¤ў аЁвҐ«м® ўл§®ў®¬ msgget ) . ‚в®а®© аЈг¬Ґв ( msgp ) ЇаҐ¤бв ў«пҐв б®Ў®© ¤аҐб ЎгдҐа , Єг¤ Ўг¤Ґв Ї®«®¦Ґ® Ё§кп⮥ б®®ЎйҐЁҐ. ’аҐвЁ© аЈг¬Ґв, msgsz , ®Ја ЁзЁў Ґв а §¬Ґа бвагЄвгал-ЎгдҐа ЎҐ§ гзҐв ¤«Ёл н«Ґ¬Ґв mtype . …йҐ а § Ї®ўв®аЁ¬бп, нв® ¬®¦Ґв Ўлвм «ҐЈЄ® ўлзЁб«Ґ®:
—ҐвўҐавл© аЈг¬Ґв, mtype — нв® вЁЇ б®®ЎйҐЁп, Ё§л¬ Ґ¬®Ј® Ё§ ®зҐаҐ¤Ё. џ¤а® Ўг¤Ґв ЁбЄ вм ў ®зҐаҐ¤Ё ЁЎ®«ҐҐ бв ஥ б®®ЎйҐЁҐ в Є®Ј® вЁЇ Ё ўҐаҐв ҐЈ® Є®ЇЁо Ї® ¤аҐбг, гЄ § ®¬г аЈг¬Ґв®¬ msgp . ‘гйҐбвўгҐв ®¤Ё ®б®Ўл© б«гз ©: Ґб«Ё mtype = 0, в® Ўг¤Ґв ў®§ўа 饮 ЁЎ®«ҐҐ бв ஥ б®®ЎйҐЁҐ, Ґ§ ўЁбЁ¬® ®в вЁЇ .
…б«Ё IPC_NOWAIT Ўл« Ї®б« д« Ј®¬, Ё Ґв Ё ®¤®Ј® 㤮ў«Ґвў®аЁвҐ«м®Ј® б®®ЎйҐЁп, msgrcv ўҐаҐв ўл§лў о饬㠯а®жҐббг ENOMSG. ‚ Їа®вЁў®¬ б«гз Ґ ўл§лў ойЁ© Їа®жҐбб Ў«®ЄЁагҐвбп, Ї®Є ў ®зҐаҐ¤м Ґ ЇаЁЎг¤Ґв б®®ЎйҐЁҐ, ᮮ⢥вбвўго饥 Ї а ¬Ґва ¬ msgrcv().
…б«Ё, Ї®Є Є«ЁҐв ¦¤Ґв б®®ЎйҐЁп, ®зҐаҐ¤м г¤ «пҐвбп, в® Ґ¬г ў®§ўа й Ґвбп EIDRM. EINTR ў®§ўа й Ґвбп, Ґб«Ё бЁЈ « Ї®бвгЇЁ«, Ї®Є Їа®жҐбб 室Ё«бп Їа®¬Ґ¦гв®з®© бв ¤ЁЁ ¬Ґ¦¤г ®¦Ё¤ ЁҐ¬ Ё Ў«®ЄЁа®ўЄ®©.
„ ў ©вҐ а бᬮваЁ¬ дгЄжЁо-ЇҐаҐе®¤ЁЄ ¤«п Ё§кпвЁп б®®ЎйҐЁп Ё§ 襩 ®зҐаҐ¤Ё.
Џ®б«Ґ гбЇҐи®Ј® Ё§кпвЁп б®®ЎйҐЁп г¤ «пҐвбп Ё§ ®зҐаҐ¤Ё Ё ҐЈ® па«лЄ.
ЃЁв MSG_NOERROR ў msgflg ЇаҐ¤®бв ў«пҐв ҐЄ®в®алҐ ¤®Ї®«ЁвҐ«млҐ ў®§¬®¦®бвЁ. …б«Ё дЁ§ЁзҐбЄ п ¤«Ё б®®ЎйҐЁп Ў®«миҐ, 祬 msgsz , Ё MSG_NOERROR гбв ®ў«Ґ, в® б®®ЎйҐЁҐ ®ЎаҐ§ Ґвбп Ё ў®§ўа й Ґвбп в®«мЄ® msgsz Ў ©в. Ќ®а¬ «мл© ¦Ґ msgrcv() ў®§ўа й Ґв -1 (E2BIG), Ё б®®ЎйҐЁҐ ®бв Ґвбп ў ®зҐаҐ¤Ё ¤® Ї®б«Ґ¤гойЁе § Їа®б®ў. ’ Є®Ґ Ї®ўҐ¤ҐЁҐ ¬®¦® ЁбЇ®«м§®ў вм ¤«п б®§¤ Ёп ¤агЈ®© ®ЎҐав®з®© дгЄжЁЁ, Є®в®а п Ї®§ў®«Ёв ¬ «Ї®¤Ј«п¤лў вм» ўгвам ®зҐаҐ¤Ё, зв®Ўл г§ вм, ЇаЁи«® «Ё б®®ЎйҐЁҐ, 㤮ў«Ґвў®апо饥 襬㠧 Їа®бг.
‚лиҐ ўл § ¬ҐвЁ«Ё ®вбгвбвўЁҐ ¤аҐб ЎгдҐа Ё ¤«Ёл. ‚ н⮬ Є®ЄаҐв®¬ б«гз Ґ ¬л е®вҐ«Ё, зв®Ўл ўл§®ў Їа®иҐ« Ґг¤ з®. Ћ¤ Є® ¬л Їа®ўҐаЁ«Ё ў®§ўа 饨Ґ E2BIG, Є®в®а®Ґ ¤®«¦® Ї®Є § вм, бгйҐбвўгҐв «Ё б®®ЎйҐЁҐ § вॡ®ў ®Ј® вЁЇ . ЋЎҐав®з п дгЄжЁп ў®§ўа й Ґв TRUE ў б«гз Ґ гбЇҐе , Ё FALSE — ў Їа®вЁў®¬ б«гз Ґ. Ћв¬Ґвм⥠⠪¦Ґ гбв ®ў«Ґл© д« Ј IPC_NOWAIT , Є®в®ал© Ї®¬Ґи Ґв Ў«®ЄЁа®ўЄҐ, ® Є®в®а®© ¬л Ј®ў®аЁ«Ё а миҐ.
‘ЁбвҐ¬л© ўл§®ў msgctl()
Ѓ« Ј®¤ ап ЁбЇ®«м§®ў Ёо дгЄжЁ©-ЇҐаҐе®¤ЁЄ®ў ўл Ё¬ҐҐвҐ ҐЄЁ© н«ҐЈ вл© Ї®¤е®¤ Є б®§¤ Ёо Ё ЁбЇ®«м§®ў Ёо ®зҐаҐ¤Ґ© б®®ЎйҐЁ© ў ў иЁе ЇаЁ«®¦ҐЁпе. ’ҐЇҐам Є®бҐ¬бп ҐЇ®б।б⢥® ¬ ЁЇг«Ёа®ў Ёп ўгв२¬Ё бвагЄвга ¬Ё, бўп§ л¬Ё б ¤ ®© ®зҐаҐ¤мо б®®ЎйҐЁ©.
„«п ®бгйҐбвў«ҐЁп Є®ва®«п ¤ ®зҐаҐ¤мо ЇаҐ¤ § зҐ бЁбвҐ¬л© ўл§®ў msgбtl .
PROTOTYPE: int msgctl ( int msgqid, int cmd, struct msqid_ds *buf );
RETURNS: 0 ў б«гз Ґ гбЇҐе ,-1 ў б«гз Ґ Ґг¤ зЁ
’ҐЇҐам Ё§ ®ЎйЁе б®®Ўа ¦ҐЁ© пб®, зв® Їап¬лҐ ¬ ЁЇг«пжЁЁ б ўгв८бвп¬Ё п¤а ¬®Јгв ЇаЁўҐбвЁ Є ®зҐм § Ё¬ ⥫мл¬ Ї®б«Ґ¤бвўЁп¬. Љ ᮦ «ҐЁо, Ї®- бв®п饬㠢ҐбҐ«® Ўг¤Ґв в®«мЄ® ⮬г, Єв® «оЎЁв ў¤аҐЎҐ§ЈЁ Ё б б« ¦¤ҐЁҐ¬ ЄагиЁвм Ї®¤бЁб⥬г IPC . Ћ¤ Є® ЇаЁ ЁбЇ®«м§®ў ЁЁ msgctl() б ҐЄ®в®ал¬Ё Є®¬ ¤ ¬Ё ўҐа®пв®бвм ®Ј®азЁвҐ«мле १г«мв в®ў Ґ ®зҐм ўҐ«ЁЄ . ‚®в Ёе Ё а бᬮваЁ¬.
- IPC_STAT — ‘®еа пҐв Ї® ¤аҐбг buf бвагЄвгаг msqid_ds ¤«п ®зҐаҐ¤Ё б®®ЎйҐЁ©.
- IPC_SET — “бв ў«Ёў Ґв § 票Ґ н«Ґ¬Ґв ipc_perm бвагЄвгал msqid . ‡ зҐЁп ўлЎЁа Ґв Ё§ ЎгдҐа .
- IPC_RMID — “¤ «пҐв ®зҐаҐ¤м Ё§ п¤а .
‚ҐаҐ¬бп Є 襬г а §Ј®ў®аг ® ўгв॥¬ ЇаҐ¤бв ў«ҐЁЁ ®зҐаҐ¤Ё б®®ЎйҐЁ©: msqid_ds . џ¤а® ¤Ґа¦Ёв нЄ§Ґ¬Ї«па нв®© бвагЄвгал ¤«п Є ¦¤®© ®зҐаҐ¤Ё, бгйҐбвўго饩 ў бЁб⥬Ґ. IPC_STAT ¤ Ґв ў®§¬®¦®бвм § Ё¬Ґвм Є®ЇЁо в Є®© бвагЄвгал ¤«п ЁбЇлв Ё©. Џ®б¬®ваЁ¬ ®ЎҐав®зго дгЄжЁо, Є®в®а п ЎҐаҐв нвг бвагЄвгаг Ё а §¬Ґй Ґв Є®ЇЁо Ї® гЄ § ®¬г ¤аҐбг.
…б«Ё Є®ЇЁа®ў ЁҐ ў® ўгв२© ЎгдҐа Ґў®§¬®¦®, в® ўл§лў о饩 дгЄжЁЁ ў®§ўа й Ґвбп -1. …б«Ё ¦Ґ ўбҐ Їа®и«® ®а¬ «м®, в® ў®§ўа й Ґвбп 0, Ё Ї®б« л© ЎгдҐа ¤®«¦Ґ ᮤҐа¦ вм Є®ЇЁо ўгв॥© бвагЄвгал ¤ ле ¤«п ®зҐаҐ¤Ё б Ё¤ҐвЁдЁЄ в®а®¬ qid .
—в® ¦Ґ ¬л ¬®¦Ґ¬ ¤Ґ« вм б Ї®«г祮© Є®ЇЁҐ© бвагЄвгал? …¤Ёб⢥®Ґ, зв® ¬®¦® Ї®¬Ґпвм, нв® н«Ґ¬Ґв ipc_perm . ќв® Їа ў ¤®бвгЇ ®зҐаҐ¤Ё, Ёд®а¬ жЁп ® б®§¤ ⥫Ґ Ё ў« ¤Ґ«мжҐ ®зҐаҐ¤Ё. Ћ¤ Є® Ё ®вбо¤ ¬Ґпвм Ї®§ў®«Ґ® в®«мЄ® mode, uid Ё gid .
„ ў ©вҐ ЇЁиҐ¬ ®ЎҐав®зго дгЄжЁо, Ё§¬Ґпойго ०Ё¬ ¤®бвгЇ ®зҐаҐ¤Ё. ђҐ¦Ё¬ ¤®«¦Ґ Ўлвм ЇҐаҐ¤ Є Є ¬ ббЁў «ЁвҐа ( ЇаЁ¬Ґа, «660»).
Њл ў§п«Ё ⥪гйго Є®ЇЁо ўгв॥© бвагЄвгал ¤ ле Ї®б।бвў®¬ ўл§®ў 襩 get_queue_ds ; § ⥬ sscanf() ¬ҐпҐв н«Ґ¬Ґв mode бвагЄвгал msg_perm . Ћ¤ Є® ЁзҐЈ® Ґ Їа®Ё§®©¤Ґв, Ї®Є msgctl c IPC_SET Ґ ®Ў®ўЁ« ўгваҐоо ўҐабЁо.
Ћ‘’ЋђЋ†ЌЋ! €§¬Ґпп Їа ў ¤®бвгЇ , ¬®¦® б«гз ©® «ЁиЁвм Їа ў ᥡп б ¬®Ј®! Џ®¬ЁвҐ, зв® IPC-®ЎкҐЄвл Ґ Ёб祧 ов, Ї®Є ®Ё Ґ гЁз⮦Ґл ¤®«¦л¬ ®Ўа §®¬ Ё«Ё Ґ ЇҐаҐ§ Ја㦥 бЁб⥬ . Џ®н⮬г в®, зв® ўл Ґ ўЁ¤ЁвҐ ®зҐаҐ¤Ё ipcs-®¬, Ґ ®§ з Ґв, зв® ҐҐ Ґв б ¬®¬ ¤Ґ«Ґ.
Џ®б«Ґ в®Ј®, Є Є б®®ЎйҐЁҐ ў§пв® Ё§ ®зҐаҐ¤Ё, ®® г¤ «пҐвбп. Ћ¤ Є®, Є Є ®в¬Ґз «®бм а ҐҐ, IPC-®ЎкҐЄвл ®бв овбп ў бЁб⥬Ґ ¤® ЇҐаб® «м®Ј® г¤ «ҐЁп Ё«Ё ЇҐаҐ§ ЇгбЄ ўбҐ© бЁб⥬л. Џ®н⮬г и ®зҐаҐ¤м б®®ЎйҐЁ© ўбҐ ҐйҐ бгйҐбвўгҐв ў п¤аҐ Ё ЇаЁЈ®¤ Є гЇ®вॡ«ҐЁо ў «оЎ®Ґ ўаҐ¬п, Ґб¬®вап в®, зв® Ї®б«Ґ¤ҐҐ ҐЈ® б®®®ЎйҐЁҐ 㦥 ¤ ў® ҐЎҐб е. —в®Ўл Ё ¤ги 襩 ®зҐаҐ¤Ё б ¬Ёа®¬ ®в®и« Є Ў®Ј ¬, 㦥 ўл§®ў msgctl() , ЁбЇ®«м§гойЁ© Є®¬ ¤г IPC_RMID :
ќв дгЄжЁп-ЇҐаҐе®¤ЁЄ ў®§ўа й Ґв 0, Ґб«Ё ®зҐаҐ¤м г¤ «Ґ ЎҐ§ ЁжҐ¤Ґв®ў, ў Їа®вЁў®¬ б«гз Ґ ўўл¤ Ґвбп -1. “¤ «ҐЁҐ ®зҐаҐ¤Ё Ґ¤Ґ«Ё¬® Ё Ї®ЇлвЄ «оЎ®Ј® ®Ўа йҐЁп Є Ґ© Ўг¤Ґв ЎҐ§гбЇҐи®©.
msgtool: ЁвҐа ЄвЁўл© ®Ўа Ў®взЁЄ ®зҐаҐ¤Ґ© б®®ЎйҐЁ©
Њ «® Єв® бв Ґв ®ваЁж вм ҐЇ®б।б⢥го ўлЈ®¤г ®в ў®§¬®¦®бвЁ ў «оЎ®© ¬®¬Ґв Ї®«гзЁвм в®зго вҐеЁзҐбЄго Ёд®а¬ жЁо. Џ®¤®ЎлҐ ¬ вҐаЁ «л ЇаҐ¤бв ў«пов б®Ў®© ¬®йл© ¬Ґе Ё§¬ ¤«п ®ЎгзҐЁп Ё Ёбб«Ґ¤®ў Ёп ®ўле ®Ў« б⥩. Ћ¤ Є®, ҐЇ«®е® Ўл«® Ўл ¤®Ў ўЁвм Є вҐеЁзҐбЄ®© Ёд®а¬ жЁЁ Ё ॠ«млҐ ЇаЁ¬Ґал. ќв® ҐЇаҐ¬Ґ® гбЄ®аЁв Ё гЄаҐЇЁв Їа®жҐбб ®Ўг票п.
„® ᥩ Ї®ал ўбҐ в® е®а®иҐҐ, зв® ¬л ᤥ« «Ё — нв® ®ЎҐав®злҐ дгЄжЁЁ ¤«п ¬ ЁЇг«пжЁ© б ®зҐаҐ¤п¬Ё б®®ЎйҐЁ©. •®вп ®Ё з१ўлз ©® Ї®«Ґ§л, Ё¬Ё Ґг¤®Ў® Ї®«м§®ў вмбп ¤«п ¤ «мҐ©иҐЈ® ®ЎгзҐЁп Ё нЄбЇҐаЁ¬Ґв®ў. ‘гйҐбвўгҐв б।бвў®, Ї®§ў®«по饥 а Ў®в вм б IPC-®зҐаҐ¤п¬Ё Ё§ Є®¬ ¤®© бва®ЄЁ — msgtool() . •®вп msgtool() Ўг¤Ґв ЁбЇ®«м§®ў ў 楫пе ®Ўг票п, ® ЇаЁЈ®¤Ёвбп Ё ॠ«м® ЇаЁ ЇЁб ЁЁ бЄаЁЇв®ў.
ЋЇЁб ЁҐ
Џ®ўҐ¤ҐЁҐ msgtool() — § ўЁбЁв ®в аЈг¬Ґв®ў Є®¬ ¤®© бва®ЄЁ, з⮠㤮Ў® ¤«п ўл§®ў Ё§ бЄаЁЇв shell . Џ®§ў®«пҐв ¤Ґ« вм ўбҐ зв® гЈ®¤®, ®в б®§¤ Ёп, Ї®бл«ЄЁ Ё Ї®«г票п б®®ЎйҐЁ© ¤® । ЄвЁа®ў Ёп Їа ў ¤®бвгЇ Ё г¤ «ҐЁп ®зҐаҐ¤Ё. €§ з «м® ¤ л¬Ё б®®ЎйҐЁ© ¬®Јгв Ўлвм в®«мЄ® «ЁвҐалҐ ¬ ббЁўл. “Їа ¦ҐЁҐ — Ё§¬ҐЁвҐ нв® в Є, зв®Ўл ¬®¦® Ўл«® Ї®бл« вм Ё ¤агЈЁҐ ¤ лҐ.
‘Ёв ЄбЁб Є®¬ ¤®© бва®ЄЁ
Џ®бл«Є б®®ЎйҐЁ© — msgtool s (type) «text»
€§кпвЁҐ б®®ЎйҐЁ© — msgtool r (type)
€§¬ҐҐЁҐ Їа ў ¤®бвгЇ — msgtool m (mode)
“Ёз⮦ҐЁҐ ®зҐаҐ¤Ё — msgtool d
‘«Ґ¤го饥, зв® ¬л а бᬮваЁ¬, нв® Ёбе®¤л© вҐЄбв msgtool . …Ј® б«Ґ¤гҐв Є®¬ЇЁ«Ёа®ў вм ў ўҐабЁЁ бЁб⥬л, Є®в®а п Ї®¤¤Ґа¦Ёў Ґв System V IPC. “ЎҐ¤ЁвҐбм ў «ЁзЁЁ System V IPC ў п¤аҐ, Є®Ј¤ Ўг¤ҐвҐ ЇҐаҐб®ЎЁа вм Їа®Ја ¬¬г!
Ќ Ї®«пе ®в¬ҐвЁ¬, зв® и гвЁ«Ёв Ўг¤Ґв ўбҐЈ¤ б®§¤ ў вм ®зҐаҐ¤м, Ґб«Ё ҐҐ Ґ Ўл«®.
‡ ¬Ґз ЁҐ. Џ®бЄ®«мЄг msgtool ЁбЇ®«м§гҐв ftok() ¤«п ЈҐҐа жЁЁ Є«о祩 IPC, ўл ¬®¦ҐвҐ аў вмбп Є®д«ЁЄвл, бўп§ лҐ б ¤ЁаҐЄв®аЁп¬Ё. …б«Ё ўл Ј¤Ґ-в® ў бЄаЁЇвҐ ¬ҐпҐвҐ ¤ЁаҐЄв®аЁЁ, в® ўбҐ нв® ўҐапЄ Ґ ба Ў®в Ґв. ќв® ®Ўе®¤Ёвбп Їг⥬ Ў®«ҐҐ пў®Ј® гЄ § Ёп ЇгвЁ ў msgtool, ўа®¤Ґ «/tmp/msgtool», Ё«Ё ¤ ¦Ґ § Їа®б ЇгвЁ Ё§ Є®¬ ¤®© бва®ЄЁ ў¬ҐбвҐ б ®бв «мл¬Ё аЈг¬Ґв ¬Ё.