所以我需要通过管道将结构传递给子进程。我已经调用了管道fileStatusPipe
。
所以这里是通过管道传递结构的父代码:
close(fileStatusPipe[0]);
//Some Code
while ((dirEntry = readdir(directory)) != NULL)
{
write(fileStatusPipe[1], &dirEntry, sizeof(dirEntry));
}
close(fileStatusPipe[1]);
这里是子进程的代码:
struct dirent * data;
close(fileStatusPipe[1]);
while(read(fileStatusPipe[0],&data,sizeof(data)) > 0)
{
printf("%ld: %s\n", data->d_ino, data->d_name);
}
close(fileStatusPipe[0]);
exit(0);
虽然打印了正确的条目数,但条目为空。也就是说,通过了正确的结构数量;但是,它们的内容是空的。为什么会这样,我该如何纠正?
答案 0 :(得分:0)
警告:这假设您的readdir
为readdir(3)
vs readdir(2)
- 请参阅man 3 readdir
(vs man 2 readdir
)。< / p>
以下是[更正]的父母:
while ((dirEntry = readdir(directory)) != NULL)
{
write(fileStatusPipe[1], dirEntry, sizeof(struct dirent));
}
孩子:
struct dirent data;
close(fileStatusPipe[1]);
while(read(fileStatusPipe[0],&data,sizeof(data)) > 0)
{
printf("%ld: %s\n", data.d_ino, data.d_name);
}
close(fileStatusPipe[0]);
exit(0);
否则,它会更精细,涉及d_reclen
。