我正在使用子进程来执行sha1sum程序。对于某些上下文,基本上sha1sum将获取一个文件并为其创建一个唯一的代码。 (没有做到这一点,但这并不重要)。 代码长度为40个字符。
因此,我的子进程将执行它,父进程将保存代码并将其放入缓冲区。 我构建了一个主要功能来测试它是否正在做我想要的东西,我注意到String还没有完成。我认为它是一个malloc问题。我评论了代码为什么我这么认为。
char* getN(char *name){
int fd[2],pid;
char *buffer = (char*)malloc(41*sizeof(char));
pipe(fd);
pid=fork();
if(!pid){
close(fd[0]);
dup2(fd[1],1);
close(fd[1]);
execlp("sha1sum","sha1sum",name,NULL);
}
else{
close(fd[1]);
read(fd[0],buffer,sizeof(buffer)); /* if i change this sizeof to like sizeof(buffer)+2 it prints 2 more chars than it previously did. no clue why. */
close(fd[0]);
wait(NULL);
}
return buffer;
}
int main(){
char *a=getN("file.pdf"); // file that's in my current directory.
printf("%s\n",a);
return 0;
}
感谢。
答案 0 :(得分:1)
buffer是一个指针,而不是一个静态数组,因此sizeof(buffer)返回一个指针的大小。 (4位在32位架构上,8位在64位上)。当你调用read时,你不想要指针的大小,你想要它所指向的数据的大小,所以你需要传入你作为参数传递给malloc的相同值(在这种情况下, 41)。