2016-10-01 8 views
0

私のコードでシステムコールread()とwrite()を最小限に抑えるには?システムコールの回数を最小限に抑える方法は? Cコード

int copy(char* entry, char* exit){ 
    char buf; 
    int in; 
    int out; 

    in = open(entry,O_RDONLY); 
    out = open(exit ,O_APPEND|O_WRONLY); 
    while(read(in, &buf, 1) != 0){ 
     write(out, &buf, 1); } 

    close(in); 
    close(out); 
    return 0; 

} 
+2

より大きなバッファを使用してください。 – tkausl

+0

しかし、ファイルのサイズは50でも350でもかまいません。したがって、呼び出しの回数を最小限に抑えるバッファセットの大きさはわかりません。 – Henrix

+0

バッファは任意の長さにすることができます。 1Kバイトの場合、システムコールの数を1000で割る。 'read()'の他に、読み込む残りのバイトがバッファ幅よりも小さい場合に読み込まれるバイト数が与えられます。 –

答えて

1

あなたが今書き、たとえば256のために、あなたのバッファを拡大と仮定:

char buf[256]; 
int n; 
... 
while((n=read(in, buf, sizeof(buf))) > 0){ 
    write(out, buf, n); 
} 

これは、すべての読み取り時に、256バイトの最大値を読み取ります。 readは読み取ったバイト数を返します。したがって、nにはこの番号があります。これは書き出すものです。最後の読み取りは256未満になるため、最後の書き込みも256未満になります。

関連する問題