2

私の目的は、カーネルへのファイル書き込み操作を減らすことです。そのため、POSIX でのキャッシュ/バッファリング メカニズムを探しています。標準 C ライブラリ setbuf がそれを行うと思いますが、POSIX に同様の呼び出しはありますか?

たとえば、バッファ サイズを 1K バイトに設定したいのですが、プログラムがバッファ サイズを超える前にディスクへの実際の書き込み操作を開始しないようにしたいと考えています。

fdpipe= open(PIPE_NAME,O_RDONLY);
......

fd = open(filename,O_CREAT|O_WRONLY|O_TRUNC|O_LARGEFILE,S_IREAD|S_IWRITE);
....

while((len = read(fdpipe,buffer,sizeof(buffer))) > 0) {
     ....
     ret = write(fd,buffer,length = strlen(buffer));
}
4

2 に答える 2

3

単純に stdio 機能を使用しないのはなぜですか? を使用して、特定のファイル記述子に対して読み取り/書き込みを行うfdopenを作成し、で必要なバッファ サイズを設定できます。FILE*setvbuf

fdpipe = open(PIPE_NAME,O_RDONLY);
......

fd = open(filename,O_CREAT|O_WRONLY|O_TRUNC|O_LARGEFILE,S_IREAD|S_IWRITE);
FILE* outf = fdopen(fd, "wb");
char obuffer[1024];
setvbuf(outf, obuffer, _IOFBF, sizeof(obuffer));
....

while((len = read(fdpipe,buffer,sizeof(buffer))) > 0) {
     ....
     ret = fwrite(buffer,1,length = strlen(buffer),outf);
}
于 2013-06-20T11:57:10.503 に答える
0

独自のプログラム バッファにデータを保持するだけです。自分のバッファが 1K に達するまで、write() システム コールを呼び出さないでください。次に、write() と flush() を呼び出します。これはあなたにとって良くありませんか?

于 2013-06-21T04:44:02.573 に答える