我有一个任务在Linux 我不能使它工作。
我有一个程序, 接收文本文件作为参数。 然后它使用 < code> fork () code > 创建一个子进程, 并发送到子进程, 按行排列收到的文本文件内容作为参数。 子进程需要计算行数, 然后返回到父进程 。
这是我到现在为止拥有的, 但有些儿童程序并不接收所有的线条。 我测试时用的是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]
", argv[0]);
return 0;
}
fp = fopen(argv[1], "r");
if(!fp)
{
printf("Error: File %s does not exist.
", argv[1]);
return 0;
}
if(pipe(p) == -1)
{
printf("Error: Creating pipe failed.
");
exit(0);
}
// creates the child process
if((pid=fork()) == -1)
{
printf("Error: Child process could not be created.
");
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
",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
", readbuffer);
}
// close the read
close(p[0]);
}
fclose(fp);
}