免责声明:这是一个任务。我不是要求明确的代码。我只是寻求帮助理解这些概念,以便我可以学习材料而不复制其他人所做的事情。
我的任务是从文本文件中获取一些数据,解析出单词,按字母顺序排序,删除重复项,然后将它们输出到一个新的文本文件中。这将使用三个进程来完成,使用 IPC 管道。这是我第一次与管道或任何 IPC 一起工作,所以如果我遇到一些外行,请理解。
所以我把主函数分成了三个进程:输入/父进程、排序(子进程)和输出(孙子进程)。我在父进程中创建了一个 IO 流,需要将其通过管道传输到排序过程。我已经创建了那个管道并关闭了未使用的末端(stdin
用于输入,stdout
用于排序。)
我的问题是:我不知道如何将数据从 IO 缓冲区移动到管道(在标准输出)。我觉得它应该使用fputs
,其中一次将解析的单词列表传递给stdout
一个单词。
以下是我迄今为止为输入过程创建的内容。文件 IO 不是我的强项,所以如果那里有错误,请告诉我,我会尽我所能修复它们。谢谢您的帮助!
} else { /* This is the input/parent process */
printf("This is the input process\n");
close(input_to_sortFD[0]); /*
* Closes the parent-side read-end of
* the pipe
*/
pipeStream = fdopen(input_to_sortFD[1], "w"); /*
* Buffer that feeds into
* write-end of pipe
*/
ioFileFD = fopen(ioFile, "r");
if (ioFileFD == NULL) {
perror("Fatal error: failed to open requested file");
exit(-1);
}
int i = 0;
while (fscanf(ioFileFD, "%s", wordList) != EOF) {
fputs(wordList[i], stdout);
i++;
}
}