【发布时间】:2016-12-06 13:43:15
【问题描述】:
我有 2 个程序(write.c 和 read.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
【问题讨论】:
标签: c named-pipes