”);

Write(STDOUT_FILENO, “CC
”, 3);

if (fork() == -1)

exit(1);

exit(0);

}

當(dāng)在終端執(zhí)行該程序時,輸出入下:

Hello World

CC

當(dāng)把文字輸出到文件時,文件中保存的文字如下:

CC

Hello World

Hello World

分析:當(dāng)把文字輸出到終端時,stdio函數(shù)組是按行輸出。而輸出到文件時,是按照塊輸出。也就是說,在輸出到文件時,printf()函數(shù)把”Hello World
”輸入進用戶stdio緩沖區(qū),但是沒有達到輸出塊的大小。write函數(shù)直接把“CC
”輸出到內(nèi)核緩沖區(qū),而不是用戶進程的緩沖區(qū)。接下來fork()出一個子進程,子進程的用戶緩沖區(qū)是拷貝父進程的,也就是說在子進程中的stdio緩沖區(qū)中也存在一個”Hello World
”,但是內(nèi)核緩沖區(qū)是不會拷貝的。CC出現(xiàn)在Hello World前面是因為執(zhí)行完write()后,CC已近在內(nèi)核緩沖區(qū)中,而printf()后“Hello World”還在用戶stdio緩沖區(qū)中,直到執(zhí)行了exit(),才把“Hello World”刷新到內(nèi)核緩沖區(qū)中。

分享到

wangyao

相關(guān)推薦