mkfifo("fifo", S_IFIFO | 0666);
if ((fifo = open("fifo",O_RDONLY)) == -1)
printf("errno %d", errno);
perror(0);
printf("server fifo id = %d\n",fifo);
[FIFO] баг open?
Две программы клиент и сервер взаимодействуют через именованный канал. Сервер создает канал, потом к нему подключается клиент.
На сервере
Код:
На клиенте
Код:
if ((fifo = open("fifo",O_RDWR)) == -1)
printf("errno %d", errno);
perror(0);
printf("client fifo id = %d\n",fifo);
printf("errno %d", errno);
perror(0);
printf("client fifo id = %d\n",fifo);
На сервере дескриптору fifo присваивается значение 3, а на клиенте <!!!> 0. То есть фактически дескриптор fifo отождествляется с дескриптором стандартного потока вывода. И как следствие когда я на клиенте пишу что-нибудь в него типа
write(fifo,&num,sizeof(int))
то получаю мгновенный вывод на экран (причем не num, а всякие сторонние символы). Ну и соответственно сервер не может ничего прочитать. Подскажите в чем проблема, заранее спасибо.
FIFO в основном используется для взаимодействия процессов уровня пользователя или процессов уровня ядра.
поглядите в сторону socket или, что намного и намного лучше RPC.
С RPC могу привести пример. с сокетами уже приводился.