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

Dans le programme ci-dessus, je vous écris au descripteur de fichier ZERO que je suppose par défaut est STDIN .. Alors pourquoi je suis-je recevoir la sortie à STDOUT?appel système d'écriture au fichier desciptor ZERO

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

Que pensez-vous qu'il devrait se passer lorsque vous écrivez ** à 'stdin'? –

+0

Il ne devrait pas y avoir de sortie au moins ... –

+0

Pour que la sortie ne mène à rien, le descripteur référencé par le descripteur 0 devrait avoir la propriété que l'entrée provient d'un terminal mais la sortie a été rejetée. Aucun mécanisme n'existe parce qu'un tel mécanisme n'a pas d'utilité réelle. –

Répondre

7

L'entrée standard est destinée à la lecture et non à l'écriture. Ce qui se passe lorsque vous écrivez sur une entrée standard (ou lisez depuis la sortie standard) n'est pas spécifié. Ici, l'entrée standard et la sortie standard pointent vers le pseudo-terminal dans lequel s'exécute l'application, et l'émulateur de terminal n'a pas pris soin de rendre le descripteur '0' "en lecture seule". Par conséquent, le noyau n'empêche pas d'écrire sur une entrée standard, et il va vers le pseudo-terminal comme s'il était écrit sur une sortie standard. Pour la portabilité, vous ne devriez pas compter sur un tel comportement.

+0

Cool réponse! Je ne le savais pas! –

Questions connexes