我在 Linux 中有一个任务,但我无法让它工作。
我有一个接收文本文件作为参数的程序。fork()
然后,它使用作为参数接收的文本文件的内容逐行创建子进程并将其发送给子进程。子进程需要计算行数并将收到的行数返回给父进程。
这是我到目前为止所拥有的,但在某种程度上,子进程没有收到所有的行。对于我的测试,我使用了一个包含 9 行的文本文件。父进程以字符串形式发送了 9 行,但子进程只收到了其中的 2 或 3 行。
我究竟做错了什么?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char string[80];
char readbuffer[80];
int pid, p[2];
FILE *fp;
int i=0;
if(argc != 2)
{
printf("Syntax: %s [file_name]\n", argv[0]);
return 0;
}
fp = fopen(argv[1], "r");
if(!fp)
{
printf("Error: File '%s' does not exist.\n", argv[1]);
return 0;
}
if(pipe(p) == -1)
{
printf("Error: Creating pipe failed.\n");
exit(0);
}
// creates the child process
if((pid=fork()) == -1)
{
printf("Error: Child process could not be created.\n");
exit(0);
}
/* Main process */
if (pid)
{
// close the read
close(p[0]);
while(fgets(string,sizeof(string),fp) != NULL)
{
write(p[1], string, (strlen(string)+1));
printf("%s\n",string);
}
// close the write
close(p[1]);
wait(0);
}
// child process
else
{
// close the write
close(p[1]);
while(read(p[0],readbuffer, sizeof(readbuffer)) != 0)
{
printf("Received string: %s\n", readbuffer);
}
// close the read
close(p[0]);
}
fclose(fp);
}