2010-04-14 49 views
1
int main () 
{ 
    char C[] = "Hello World"; 
    write(0,C,sizeof(C)); 
    return 0; 
} 

在上面的程序,我写文件描述符ZERO,我想在默认情况下是STDIN。然后我为什么我在STDOUT获得输出?写系统调用文件desciptor ZERO

[email protected]:~$ ./a.out 
Hello [email protected]:~$ 
+1

当你**写入'stdin'时,你认为应该发生什么? – 2010-04-14 16:28:32

+0

不应该有任何输出至少... – 2010-04-14 16:29:32

+0

为了使输出无处可去,描述符0引用的描述符必须具有输入来自终端但输出被丢弃的属性。没有这样的机制存在,因为这种机制没有真正的用处。 – 2011-08-14 19:36:57

回答

7

标准输入用于阅读,而不是写作。当您写入标准输入(或从标准输出读取)时,会发生什么情况未指定。这里,标准输入和标准输出都指向运行应用程序的伪终端,而终端仿真程序并没有注意使'0'描述符为“只读”。因此,内核不会阻止写入标准输入,并且它会转到伪终端,就像写入标准输出一样。

为便于携带,您不应该依赖这种行为。

+0

很酷的答案!不知道这个! – 2010-07-30 15:27:38