c-试图从管道读取字符串,但它没有读取整个字符串



我正在使用一个子进程来执行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)。

相关内容

  • 没有找到相关文章

最新更新