通过管道将结构传递给C中的子项

时间:2018-03-24 22:43:56

标签: c struct pipe

所以我需要通过管道将结构传递给子进程。我已经调用了管道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);

虽然打印了正确的条目数,但条目为空。也就是说,通过了正确的结构数量;但是,它们的内容是空的。为什么会这样,我该如何纠正?

1 个答案:

答案 0 :(得分:0)

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