2016-08-02 3 views
0
int main(int argc, char *argv[]) 

{ 

int i, j, count; 
int f1; 
char buf[16]; 
f1 = open(argv[1], O_RDWR | O_APPEND); 
if(f1 == -1) 
    perror("open failed"); 

if(lseek(f1, 0, SEEK_SET) == -1) 
    printf("lseek failed\n"); 


while(count = read(0, buf, 16)) { 
    write(f1, buf, count); 
} 

close(f1); 
return 0; 
} 

これは私のコードです。引数として与えられたファイルを開き、ファイルの先頭にコンソールからすべてを書き込む必要があります。ファイルは追加モードで開き、lseekを使用してディスクリプタを開始位置に移動します。 f1の値に変更はありません。lseekは失敗しました。ファイルの追加モードで動作しません。

答えて

0

O_APPENDモードでファイルを開くと、write()の呼び出しのたびに、アトミック操作を処理するためにオフセットポインタがファイルの最後に移動するためです。

これは、ファイルの最後からのみ「ログファイル」などのファイルに「テキスト」を追加する多くのプロセスの目的に使用されます。

ようにコードを変更しよう:()(EOFのlseekを使用しようとする必要がある場合)のみO_RWONLYフラグに

開いているファイル。

open()でO_APPENDフラグを使用せずに、write()は呼び出しごとに自動的にオフセットをEOFに移動しませんでした。

関連する問題