Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΡΠΊΡΡΡΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°, Π·Π°ΠΏΠΈΡΡ Π² Π½Π΅Π³ΠΎ ΠΈ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ Π½Π° ΡΡΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΠ³Π΄Π° Π²Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠΈΡΠΊΠ°, ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΠΊΡΡΡΡ ΠΊΠ°Π½Π°Π» ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² Π½Π΅Π³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠ½ΠΎΠ²Π° Π·Π°ΠΊΡΡΡΡ ΠΊΠ°Π½Π°Π».
1.Β Π‘Π½Π°ΡΠ°Π»Π° ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΠΊΠ°Π½Π°Π» ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
int start_resp_to_client(const message_db_t mess_to_send) {#if DEBUG_TRACEΒ printf("%d :- start_resp_to_client()\n", getpid());#endifΒ (void)sprintf(client_pipe_name, CLIENT_PIPE,Β mess_to_send.client_pid);Β if ((client_fd = open(client_pipe_name, O_WRONLY)) == -1) return(0);Β return(1);}2.Β ΠΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΠΎΠ·ΠΆΠ΅.
int send_resp_to_client(const message_db_t mess_to_send) {Β int write_bytes;#if DEBUG_TRACEΒ printf("%d :- send_resp_to_client()\n", getpid());#endifΒ if (client_fd == -1) return(0);Β write_bytes = write(client_fd, &mess_to_send, sizeof(mess_to_send));Β if (write_bytes != sizeof(mess_to_send)) return(0);Β return(1);}3.Β Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΡΠΎΠΉΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΠΊΠ°Π½Π°Π».
void end resp_to_client(void) {#if DEBUG_TFACEΒ printf("%d :- end_resp_to_client()\n", getpid());#endifΒ if (client_fd != -1) {Β Β (void)close(Ρlient_fd);Β Β client_fd = -1;Β }}ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ β ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠ°ΠΉΠ»Π΅ pipe_imp.c. ΠΠ½ΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΈΠ½ΡΡΠΈΠ³ΡΡΡΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ
send_mess_to_server1.Β ΠΠΎΡΠ»Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ
client_startingint client_starting(void) {#if DEBUG_TFACEΒ printf("%d client_starting\n", getpid());#endifΒ mypid = getpid();Β if ((server_fd = open(SERVER_PIPE, O_WRONLY)) == -1) {Β Β fprintf(stderr, "Server not running\n");Β return(0);Β }Β (void)sprintf(client pipe name, CLIENT_PIPE, mypid);Β (void)unlink(client_pipe_name);Β if (mkfifo(client_pipe_name, 0777) == -1) {Β fprintf(stderr, "Unable to create client pipe %s\n", client_pipe_name);Β return(0);Β }Β return(1);}2.Β Π€ΡΠ½ΠΊΡΠΈΡ
client_endingvoid client_ending(void) {#if DEBUG_TRACEΒ printf("%d client_ending()\n", getpid());#endifΒ if (client_write_fd != -1) (void)close(client_write_fd);Β if (client_fd != -1) (void)close(client_fd);Β if (server_fd != -1) (void)close(server_fd);Β (void)unlink(client_pipe_name);}3. Π€ΡΠ½ΠΊΡΠΈΡ
send_mess_to_serverint send_mess_to_server(message_db_t mess_to_send) {Β int write_bytes;#if DEBUG_TRACEΒ printf("%d send_mess_to_server()\n", getpid());#endifΒ if (server_fd == -1) return(0);Β mess_to_send.client_pid = mypid;Β write_bytes = write(server_fd, &mess_to_send, sizeof(mess_to_send));Β if (write_bytes != sizeof(mess_to_send)) return(0);Β return(1);}ΠΠ°ΠΊ ΠΈ Π² ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡΡ , ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π°Π·Π°Π΄ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠ².
1.Β ΠΠ°Π½Π½Π°Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π΄Π»Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠ½Π° ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΠΊΠ°Π½Π°Π» ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» ΠΊΠ°Π½Π°Π»Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ. Π§ΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π²Ρ ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅ ΠΏΠΎΡΠ΅ΠΌΡ.
int start_resp_from_server(void) {#if DEBUG_TRACEΒ printf("%d :- start_resp_from_server()\n", getpid());#endifΒ if (client_pipe_name[0] == '\0') return(0);Β if (client_fd != -1) return(1);Β client_fd = open(client_pipe_name, O_RDONLY);Β if (client_fd != -1) {Β client_write_fd = open(client_pipe_name, O_WRONLY);Β Β if (client_write_fd != -1) return(1);Β Β (void)close(client_fd);Β Β client_fd = -1;Β }Β return(0);}