以下是我要做的事情:
使用两个进程(一个父进程,一个子进程)编写C程序。子进程遍历整个目录,并将dir的路径及其大小发送给父进程,父进程打印出类似“dir size \ tdirpath”的信息。
这是我到目前为止所做的:
#define _XOPEN_SOURCE 500
#include <ftw.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/wait.h>
static int dirSize = 0;
char *dirPath = NULL;
static int dirInfo(const char *fpath, const struct stat *sb, int tflag, struct FTW *ftwbuf){
dirSize = sb -> st_size;
dirPath = fpath;
return 0;
}
int main(int argc, char *argv[]){
pid_t processCheck[1];
int i = 0;
int pipes[1][2];
char *directoryPath = argv[1];
processCheck[1] = fork();
if(processCheck[1]==0){
close(pipes[i][0]);
nftw(directoryPath, dirInfo, 10, FTW_PHYS);
write(pipes[i][1], &dirSize, sizeof dirSize);
write(pipes[i][1], &dirPath, sizeof dirPath);
close(pipes[i][1]);
exit(0);
}
close(pipes[i][1]);
int childProcessStatus;
if(WIFEXITED(childProcessStatus)&&WEXITSTATUS(childProcessStatus)==0){
int v;
char * d;
if(read(pipes[i][0], &v, sizeof v) == sizeof(v)){
printf("%d\t" , v);
}
if(read(pipes[i][0], &d, sizeof d) == sizeof(d)){
printf("%s\n", d);
}
}
close(pipes[i][0]);
return 0;
}
问题:程序正在编译并运行,但它没有打印任何东西。此外,我需要使用哈希映射,链接列表或父进程中的树与子进程同时按大小对目录进行排序
答案 0 :(得分:0)
最明显的错误是您没有创建管道。您需要在 pipe(pipes[i]);
:
processCheck
另一个错误(或至少未定义的行为,在大多数情况下是相同的)是processCheck[1]
是一个长度为1的数组,这意味着当您尝试访问{{ 1}}你已经过去了。