読者です 読者をやめる 読者になる 読者になる

write

UNIXシステムコール

writeは、指定されたファイルディスクリプタに、指定されたバイナリデータを書き込むUNIXシステムコール・・・。

Man page of WRITE

readと同様に、writeも使い分けを考える必要がある・・・。
writeとfwriteで比較してみる・・・。

"ABCD"の4バイトデータをwriteで2048回書き込む・・・。

$ time ./write_1
BUFSIZ = 8192
write start
write end

real    0m0.049s
user    0m0.001s
sys     0m0.015s
$

0.049秒・・・。

"ABCD"の4バイトデータをfwriteで2048回書き込む・・・。

$ time ./fwrite_1
BUFSIZ = 8192
fwrite start
fwrite end

real    0m0.005s
user    0m0.000s
sys     0m0.004s
$

0.005秒・・・。

やはり、バッファリングしてでもfwriteのほうが、writeを1回しか呼ばないので速い・・・。

bufのサイズを819200とし、memsetですべて文字'A'で埋める・・・。
それをwriteで一気に書き出している・・・。

$ time ./write_2
BUFSIZ = 8192
write start
write end

real    0m0.006s
user    0m0.000s
sys     0m0.005s
$

0.006秒・・・。

こちらも、819200バイトのbufをmemsetで'A'で埋めて、fwriteで書き出し・・・。

$ time ./fwrite_2
BUFSIZ = 8192
fwrite start
fwrite end

real    0m0.013s
user    0m0.000s
sys     0m0.007s
$

0.013秒・・・。

今度は1回で書き出すwriteのほうが、内部でwriteで100回書き出すfwriteより速い・・・。

Sample/write_1.c at master · bg1bgst333/Sample · GitHub
Sample/fwrite_1.c at master · bg1bgst333/Sample · GitHub
Sample/write_2.c at master · bg1bgst333/Sample · GitHub
Sample/fwrite_2.c at master · bg1bgst333/Sample · GitHub