【发布时间】:2014-11-28 16:25:11
【问题描述】:
我有一个 FIFO 管道,它在 O_RDWR 模式下使用 open() 在两端打开。在读取端,read() 不是读取所有字符,而是小于调用中指定的字符。有没有办法确保使用 open() 读取所有字符?
提前致谢
if (p != NULL){
printf("Inside p not null!\n");
if((fd = open(p, O_RDWR)) < 0){
perror("File could not be opened!");
exit(EXIT_FAILURE);
}
//FILE *rdptr = fopen(p,"r");
memset(buf,0,file_len);
rc = read(fd, buf, file_len);
printf("Number of bytes read: %d\n", rc);
printf("Data detected on FIFO\n");
buf[rc] = '\0';
char base[20] = "output.txt";
char name[20];
sprintf(name, "%d%s", suffix, base);
FILE *fptr = fopen(name,"ab+");
fd_wr = open(name,O_WRONLY);
charnum = write(fd_wr,buf,rc);
kill(id_A, SIGKILL);
//printf("No. of characters written: %d\n",charnum);
//FD_CLR(fd, &rdfs);
}
【问题讨论】:
-
您是否尝试再次调用
read()以读取剩余字符? -
不,我只读过一次。代码已添加到已编辑的帖子中。我不知道该怎么做。
-
如果您正在写入固定数量的数据然后杀死作者,为什么不直接使用文件呢?看来这里不需要 FIFO。
-
不,实际上每个写入器都必须写入一个单独的FIFO,由上面的进程读取,然后它会杀死写入器。 FIFO 是要求的一部分。我无法改变这一点。