1+ #include <stdio.h>
2+ #include <sys/stat.h>
3+ #include <sys/types.h>
4+ #include <fcntl.h>
5+ #include <unistd.h>
6+ #include <stdbool.h>
7+ #include <string.h>
8+ #include <stdlib.h>
9+
10+ #include "fifo_def.h"
11+
12+ #define TX_FIFO_NAME "client_to_server"
13+ #define RX_FIFO_NAME "server_to_client"
14+
15+ int main (void )
16+ {
17+ if (access (FIFO_DIR , F_OK ) != 0 ) {
18+ printf ("Fifo dir not exists, now crerate it.\n" );
19+ __attribute__((unused )) int ret = system ("mkdir " FIFO_DIR );
20+ }
21+
22+ int err = mkfifo (FIFO_DIR TX_FIFO_NAME , 0666 );
23+ if (err == -1 ) {
24+ fprintf (stderr , "Failed to create fifo " TX_FIFO_NAME "! Error Code: %d\n" , err );
25+ return 1 ;
26+ }
27+ printf ("finished to create fifo " TX_FIFO_NAME ".\n" );
28+
29+ printf ("waitting for " RX_FIFO_NAME "...\n" );
30+ while (access (FIFO_DIR RX_FIFO_NAME , F_OK ) != 0 ) {
31+ }
32+ printf (RX_FIFO_NAME " created.\n" );
33+
34+ int rx_fifo = open (FIFO_DIR RX_FIFO_NAME , O_RDONLY );
35+ if (rx_fifo == -1 ) {
36+ fprintf (stderr , "Failed to open fifo " RX_FIFO_NAME "! ErrorCode: %d\n" , rx_fifo );
37+ unlink (FIFO_DIR TX_FIFO_NAME );
38+ return 1 ;
39+ }
40+ printf ("Fininshed to open fifo " RX_FIFO_NAME ".\n" );
41+
42+ int tx_fifo = open (FIFO_DIR TX_FIFO_NAME , O_WRONLY );
43+ if (tx_fifo == -1 ) {
44+ fprintf (stderr , "Failed to open fifo " TX_FIFO_NAME "! ErrorCode: %d\n" , tx_fifo );
45+ unlink (FIFO_DIR TX_FIFO_NAME );
46+ close (rx_fifo );
47+ return 1 ;
48+ }
49+ printf ("Finished to open fifo " TX_FIFO_NAME ".\n" );
50+
51+ char rx_buffer [256 ], tx_buffer [256 ];
52+ while (true) {
53+ int size = read (rx_fifo , rx_buffer , sizeof rx_buffer / sizeof rx_buffer [0 ] - 1 );
54+ rx_buffer [size ] = '\0' ;
55+ printf ("Readden buffer: %s, size = %d\n" , rx_buffer , size );
56+
57+ if (strcmp (rx_buffer , "esc" ) == 0 ) {
58+ break ;
59+ }
60+
61+ printf ("Input message: " );
62+ fflush (stdin );
63+ __attribute__((unused )) int ret = scanf ("%s" , tx_buffer );
64+ size = write (tx_fifo , tx_buffer , strlen (tx_buffer ));
65+ printf ("Written buffer: %s, size = %d\n" , tx_buffer , size );
66+
67+ if (strcmp (tx_buffer , "esc" ) == 0 ) {
68+ break ;
69+ }
70+ }
71+
72+ close (rx_fifo );
73+ close (tx_fifo );
74+ unlink (FIFO_DIR TX_FIFO_NAME );
75+
76+ return 0 ;
77+ }
0 commit comments