所以我需要通过管道将结构传递给子进程。我把管子叫做。
下面是通过管道传递结构的父代码:

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);

打印正确数量的条目时,条目为空。也就是说,传递了正确数量的结构;但是,它们的内容是空的。这是为什么,我该怎么纠正?

最佳答案

注意:这假设您的readdirreaddir(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

09-06 18:56