2011-04-27 23 views
0

我在Ubuntu 10.04 LTS下編譯了以下代碼和gcc版本4.4.3(Ubuntu 4.4.3-4ubuntu5)。Linux - 爲什麼錯誤消息在調用寫入後不顯示(2,「...」)?

[email protected]:~/doc$ cat simple_write.c 
#include <unistd.h> 
#include <stdlib.h> 

int main() 
{ 
    if ((write(1, "Here is some data\n", 18)) != 18) 
     write(2, "A write error has occurred on file descriptor 1\n",46); 

    exit(0); 
} 

[email protected]:~/doc$ ./simple_write 
Here is some data 

有人可以向我解釋爲什麼第二個錯誤消息不打印? 它被重定向到其他地方嗎?那麼,如何讓它顯示出來?

謝謝

+4

......真的嗎? – 2011-04-27 03:28:42

回答

2

第二條消息並沒有顯現出來,因爲第一write()成功寫18個字符。

爲了演示,將!=更改爲==

+0

對不起,我忘記了IF。 - 謝謝 – q0987 2011-04-27 03:36:03

1

write的返回值是:

成功完成後,這些函數將返回實際寫入與fildes關聯的文件的字節數。

您要求它寫入18個字節,它這樣做會返回18.您的錯誤將不會被打印,因爲18 != 18是錯誤的。也許你感到困惑,因爲\n實際上是Unixy系統上的一個字節。