2010-08-18 8 views

Répondre

2

Sur les systèmes POSIX, les flux sont des descripteurs de fichiers spéciaux. Windows a sa propre erreur, mais ils sont aussi des descripteurs de fichiers. Des exemples de fichiers spéciaux sous Windows sont les flux standard stdout, stdin et stderr, ainsi que les ports série COMn, qui peuvent être ouverts avec OpenFile(). Sous Linux, des fichiers spéciaux sont trouvés sous/proc et/dev./proc/cpuinfo lira des informations sur votre CPU./dev/sdX sont des handles pour vos disques physiques, etc.

Alors qu'est-ce qu'un fichier spécial? C'est un handle de fichier, mais le contenu n'est pas stocké sur le disque. Le descripteur de fichier est juste une interface avec le noyau. Sur les systèmes POSIX, vous utilisez open(), close(), read(), write() et ioctl() pour parler au noyau via le descripteur de fichier. Même un descripteur de fichier pour toute la carte mémoire est disponible, sous/dev/mem. Vous ouvrez ceci et passez à mmap() si vous voulez mapper une région de mémoire par exemple.

Malheureusement, Microsoft Windows ne gère pas les descripteurs de fichiers à ce niveau. Je souhaite que Windows soit plus semblable à POSIX.

+0

Windows _Handles_ travail assez similaire à cela. Vous utilisez WriteFile (sortie HANDLE) pour écrire dans un descripteur. Cela fonctionne même si c'est un handle que vous avez obtenu 'GetStdHandle (STD_OUTPUT_HANDLE);' – MSalters

2

Si vous tapez man stdio sur votre terminal, le synopsis se présente comme suit

#include <stdio.h> 

FILE *stdin; 
FILE *stdout; 
FILE *stderr; 

Ils sont vraiment des fichiers. Si vous demandez si ces fichiers existent réellement, jetez un oeil à /dev/stdin, /dev/stdout et /dev/stderr.

+0

Où seraient ces dossiers situés sur un système Windows? – Shubham

+0

@Shubham Touché :-) Je n'ai pas utilisé Windows depuis 10 ans donc je ne sais vraiment pas. –

+0

en tapant "man stdio" sur le terminal de Windows, cela signifierait que "man" n'est pas reconnu comme une commande interne ou externe, un programme utilisable ou un fichier séquentiel. "On ne sait pas quel système utilise le mec. – SigTerm

2

Ils sont de type FILE*. Ils peuvent être utilisés comme des fichiers avec des fonctions d'E/S. Mais ce ne sont pas de vrais fichiers, ce sont les flux d'E/S standard. Quand vous faites quelque chose comme ceci dans votre shell (par exemple pour linux):

cat something.txt | myprog 

... alors myprog peut lire le contenu de something.txt (sortie du programme de chat) en lisant STDIN.