我正在使用一个子进程来执行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("%sn",a);
return 0;
}
谢谢。
缓冲区是指针,而不是静态数组,所以sizeof(buffer)返回指针的大小。(4个在32位体系结构上,8个在64位上)。当您调用read时,您不想要指针的大小,而是想要它所指向的数据的大小,因此您需要将作为参数传递给malloc的相同值(在本例中为41)。