gpt4 book ai didi

c - Q : Reading from pipe to screen

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:34 24 4
gpt4 key购买 nike

我正在尝试编写一个程序,从文件中读取一些文本并将其打印到屏幕上。 parent 将读取文件的内容并将其写入 n 个管道, child 将读取它然后打印它。

到目前为止,这是我得到的:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>

int main (void)
{
pid_t pid;
char c;
FILE *fd;
char buf[100];
int N_CHILDREN = 2;
int p[N_CHILDREN][2];
int i,j;

for(i=0; i<N_CHILDREN; i++)
{
pipe(p[i]);
}

fd=fopen("123.txt","r");

for(j=0; j < N_CHILDREN;j++)
{
pid = fork ();

if (pid == 0)
{
close (p[j][1]);
while(read(p[j][0], &fd,sizeof(buf)) > 0)
printf("\n%c",&fd);

}
if (pid < 0)
{
//Fork Failed
fprintf (stderr, "Fork failure.\n");
return EXIT_FAILURE;
}
if ( pid > 0) //Parent
{
close (p[j][0]);
write(p[j][1], fd ,sizeof(buf));

}
}
}

问题是它并没有真正从文件中读取内容。我试过向它发送一串字符而不是从文件中读取,它按预期工作,两个 child 都打印了一次消息,程序结束了。

有什么想法吗?看了手册还是看不出问题出在哪里。

最佳答案

您正在混淆 C 标准 I/O 流(使用 fopen() 创建;使用 fprintf() 等写入,使用 fscanf( ) 等)与 Unix 文件描述符 I/O(使用 open()pipe() 等创建,使用 写入write() 等,用read() 等读取)

标准 I/O 函数将不透明的 FILE * 作为句柄; Unix I/O 函数将文件描述符(一个小的 int)作为句柄。

一旦你理解了概念上的差异,我相信你会意识到这一点

FILE *fd = ...
read(..., &fd, ...);

正在读取一个指向文件的指针——不是很有用 :-)

关于c - Q : Reading from pipe to screen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33657837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com