У меня есть 2 программы (write.c и read.c). Я хочу постоянно писать на именованный канал со стандартного ввода и читать с него на другом конце (и записывать на стандартный вывод). Я что-то сделал, но он работает неправильно. Программа на другом конце читается в неправильном порядке или читает специальные символы (чтобы она читала больше, чем она нужна?). Я также хочу иметь возможность сравнивать вывод именованного канала с определенной строкой.Как писать и читать из именованного канала в C?
В любом случае, вот код из обоих файлов:
write.c:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFFSIZE 512
#define err(mess) { fprintf(stderr,"Error: %s.", mess); exit(1); }
void main()
{
int fd, n;
char buf[BUFFSIZE];
mkfifo("fifo_x", 0666);
if ((fd = open("fifo_x", O_WRONLY)) < 0)
err("open")
while((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0) {
if (write(fd, buf, strlen(buf)) != strlen(buf)) {
err("write");
}
}
close(fd);
}
read.c:
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFSIZE 512
#define err(mess) { fprintf(stderr,"Error: %s.", mess); exit(1); }
void main()
{
int fd, n;
char buf[BUFFSIZE];
if ((fd = open("fifo_x", O_RDONLY)) < 0)
err("open")
while((n = read(fd, buf, BUFFSIZE)) > 0) {
if (write(STDOUT_FILENO, buf, n) != n) {
exit(1);
}
}
close(fd);
}
Пример ввода:
hello how are you
123
test
Пример неправильного выхода:
hello how are you
b123
o how are you
btest
how are you
b
Другой пример ввода:
test
hi
и Вывод:
test
hi
t
Ого, я на самом деле было это правильно в первом, но изменил его бог знает, что такое причина .. Спасибо. – mythic