ディレクトリ内のファイルを読み込み、それらがELFタイプであるかどうかをチェックして、そのファイルの最初の10バイトを出力します。問題はfread(buffer,1,4,f1);
行です。最初のwhileループではすべて正常に動作しますが、2回目の繰り返しでこのエラーがポップアップします: "segmentation fault(core dumped)"。この場合、なぜこのエラーが表示されるのか誰にも分かりますか?私はこの問題に関連した質問がたくさんある知っているが、私は答えセグメント化エラー(コアダンプされた)fread関数
while ((pDirent = readdir(pDir))!= NULL){
void *dl;
dl = dlopen(pDirent->d_name, RTLD_LAZY | RTLD_LOCAL);
if(dl != NULL){
printf("Failo vardas %s tai yra dinamine biblioteka \n",pDirent->d_name);
}else{
char buffer[4];
FILE *f1;
f1 = fopen(pDirent->d_name, "r");
fread(buffer,1,4,f1);
if(buffer[0] == 0x7f && buffer[1] == 'E' && buffer[2] == 'L' && buffer[3] =='F'){
printf("%s sis failas nera dinamine biblioteka, tai yra ELF failas \n",pDirent->d_name);
}
fclose(f1);
FILE *f2;
f2 = fopen(pDirent->d_name, "r");
char buf[10];
fread(buf,1,10,f2);
printf("%s file 10 baitu : %s \n",pDirent->d_name,buf);
fclose(f2);
}
dlclose(dl);
}
'fopen'とfread'の戻り値を確認してください。 –
pDirはどこから来ていますか?現在のディレクトリー以外のディレクトリーを見ている場合は、ディレクトリー名(およびスラッシュ)をファイル名の前に付けて開く必要があります。 –
f1とf2がNULLでなく、エラーが消えていないか確認しなければなりませんでした。 –