所以我需要通过管道将结构传递给子进程。我把管子叫做。
下面是通过管道传递结构的父代码:
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);
打印正确数量的条目时,条目为空。也就是说,传递了正确数量的结构;但是,它们的内容是空的。这是为什么,我该怎么纠正?
最佳答案
注意:这假设您的readdir
是readdir(3)
vsreaddir(2)
--请参见man 3 readdir
(vsman 2 readdir
)。
以下是[更正的]父项:
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
。