私は、sha1sumプログラムを実行するために子プロセスを使用しています。いくつかのコンテキストでは、基本的にsha1sumはファイルを取得し、独自のコードを作成します。 (これは正確ではありませんが、それは本当に重要ではありません)。 コード長は40文字です。パイプから文字列への読み込み中に文字列全体が読み取られない
私の子プロセスはそれを実行し、親プロセスはコードを保存してバッファに入れます。 私はそれが私が望むことをしていたかどうかをテストするための主要な機能を構築しました。私は文字列が完全ではないことに気付きました。私はその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;
}
ありがとうございます。
'sizeof(buffer)'の 'printf'文のように、' buffer'のサイズが実際にどのようになっているかチェックしましたか? –
ループで文字を1つずつ読んだり、一度にすべてを読んだりしてみてください。 – Nevado