2011-04-27 46 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系统上的一个字节。