ファイルの内容を取得して出力ファイルに転記するクイックプログラムを作成しました。初めて私のプログラムを実行するときにエラーはなく、すべてがうまくいくかのように見えます。しかし、出力ファイルをチェックするとファイルに何もありません。私の最初の考えは、パーミッションが正しくなく、書き込みが許可されていないということでした。私は手動でディレクトリに.txtファイルを作成し、権限を設定し、それが動作するように見えるプログラムを実行したとき(ubuntuは私にファイルの内容を表示しています)、実際のファイルを開くことはできません。 自分よりも経験豊富な人であれを助けてくれることを願っています。さてここで は私のコードです:read()、write()、open()を使ってファイルの内容を別のものにコピーする
int main(int argc, char* argv[]){
char buf[128];
int outft, inft,fileread;
// output file opened or created
if((outft = open(argv[1], O_CREAT | O_APPEND | O_RDWR))==-1){
perror("open");
}
// lets open the input file
inft = open(argv[2], O_RDONLY);
if(inft >0){ // there are things to read from the input
fileread = read(inft, buf, 160);
printf("%s\n", buf);
write(outft, buf, 160);
close(inft);
}
close(outft);
return 0;
}
あなたは128バイトバッファに160のバイトを読んでいますか? –
入力ファイルのオープンに失敗した場合、それは報告されません。 'read()'と 'write()'の戻り値もチェックされません。 – hmjd
@ paulsm4は権限に関しても同様です。また、 'open()'で 'O_CREAT'を使うときに必要です。バッファオーバーランが修正された状態でこのコードを実行すると、新しいファイルのファイルパーミッションに対してランダムなガベージが発生します。 – Dmitri