从C中的管道读取字符
该程序读取文件的内容并通过管道发送它们。我在读取子进程中的管道时遇到问题。我的输出文件中的内容是方块字符。我想我必须将c从一个地址改为一个值?从C中的管道读取字符
if (pid > 0) { /* parent */
/* close the end of the pipe we do not need */
close(pfd[0]);
/* read from the input file and write to the pipe */
while ((c = getc(from)) != EOF){
if (flipping){
c = flipChar(c);
write(pfd[1],&c, 1);
}
else
write(pfd[1],&c, 1);
}
fclose(from);
close(pfd[1]);
wait(NULL);
}
else{ /* child process */
close(pfd[1]);
while (c = read(pfd[0],&c,1))
{
/* change c from a address to value?? */
putc(c, destfile);
}
fclose(destfile);
close(pfd[0]);
}
return 0;
}
read()
返回读取的字符数。所以你执行read(pfd[0], &c, 1)
,它在c
中存储一个字符,然后立即用值1覆盖该字符(因为你从管道中读取单个字符)。
所以read()函数是我不应该使用的东西?我应该在代码中更改哪些内容,以便从父进程传递的字符在子进程中被拾取? – NuClArPeNgUiN
你正在从你的管道中拾取角色。你正在调用'read()',并且你正在'c'中存储一些东西。这很好。但是在完成之后,你继续覆盖刚刚存储的字符,因为你也正在使用由'read()'生成的返回码(它与您从管道中读取的字符不相同)也变成'c'。 –
换句话说:为什么你期望'read()'从管道返回下一个字符,假设你传递了一个缓冲区来存储事物?如果你想一次读2个或多个字符,你期望'read()'的返回值是什么? –
任何错误输出? “有麻烦”的性质是什么? –