Maison  >  Article  >  Opération et maintenance  >  Introduction détaillée aux descripteurs de fichiers et aux pointeurs de fichiers sous Linux

Introduction détaillée aux descripteurs de fichiers et aux pointeurs de fichiers sous Linux

黄舟
黄舟original
2017-06-02 09:56:111836parcourir

Cet article présente principalement des informations détaillées sur les descripteurs de fichiers et les pointeurs de fichiers sous Linux Les amis dans le besoin peuvent se référer aux

Descripteurs de fichiers sous Linux Descripteurs et pointeurs de fichiers.

Identifiant de fichier :

Tout d'abord, comprenons ce qu'est un identifiant de fichier ?

Description du fichier Un symbole est un terme en informatique et est un concept abstrait utilisé pour exprimer une référence d'un fichier.

Sous Linux, chaque processus enregistrera une table de descripteurs de fichiers dans le bloc de contrôle de processus (PCB). Le descripteur de fichier est l'index de cette table. >

pointeur vers le fichier déjà ouvert.

Chaque processus Linux doit avoir trois descripteurs de fichiers standards, correspondant à trois flux standards.

IntegerValeur Nom (unistd.h)Symbole Flux de fichiers constant
整数 名称 (unistd.h)符号常量 (stdio.h)文件流
0 Standard input STDIN_FILENO stdin
1 Standard output STDOUT_FILENO stdout
2 Standard error STDERR_FILENO stderr
(stdio.h)
0 Entrée standard STDIN_FILE

NON

stdin
1 Sortie standard STDOUT_FILENO stdout
2 Erreur standard STDERR_FILENO stderr

Le descripteur de fichier est Formellement, il s'agit d'un entier non négatif. En fait, il s'agit d'une valeur d'index pointant vers la table d'enregistrement des fichiers ouverts par le processus maintenu par le noyau pour chaque processus. Lorsqu'un programme ouvre un fichier existant ou crée un nouveau fichier, le noyau renvoie un descripteur de fichier au processus. En programmation, certaines programmations de bas niveau tournent souvent autour de descripteurs de fichiers. Cependant, le concept de descripteurs de fichiers n'est souvent applicable qu'aux systèmes d'exploitation tels que UNIX et Linux

Opérations liées aux descripteurs de fichiers :

<. th>Fonction
Opération
Génération de descripteur de fichier open(), socket() , pipe(), etc.
Opérations liées à un seul descripteur de fichier read(), write(), send(), fchmod

(), etc.

Opérations liées aux descripteurs de fichiers pluriels select(), poll(), etc. .
Opérations liées à la table des descripteurs de fichiers close(), dup(), etc. .

Pointeur de fichier :
功能 操作
文件描述符生成 open()、socket()、pipe()等
与单一文件描述符相关的操作 read()、write()、send()、fchmod()等
与复数文件描述符相关的操作 select()、poll()等
与文件描述符表相关度的操作 close()、dup()等

Le pointeur de fichier est celui que nous utilisons dans
Langage C
Ce que j'ai appris, c'est qu'en langage C, un pointeur

variable

est utilisé pour pointer vers un fichier. Ce pointeur est appelé pointeur de fichier. Grâce au pointeur de fichier, nous pouvons effectuer diverses opérations sur le fichier pointé. Le langage C utilise des pointeurs de fichiers au lieu de descripteurs de fichiers comme gestionnaires d'E/S. Le pointeur de fichier pointe vers une structure de données appelée structure FILE dans la zone utilisateur du processus. La structure FILE contient un tampon et un descripteur de fichier. Le pointeur de fichier est un format courant du langage C, il est donc relativement plus facile à transplanter.Nous obtenons généralement le pointeur de fichier :

Obtenir le pointeur plus tard , nous pouvons obtenir les informations du descripteur de fichier dans le pointeur.

Le descripteur de fichier est unique, mais le pointeur de fichier n'est pas unique. L'
FILE *fp = fopen("test.txt","r");
objet

pointé par le pointeur de fichier est unique.

Conversion des descripteurs de fichiers et des pointeurs de fichiers :

Le premier paramètre de fdopen est un descripteur de fichier ouvert, et mode indique la méthode d'ouverture String

, identique à fopen, tel que "w" ou "r".
int fileno(FILE *stream);

FILE *fdopen(int fd,const char *mode);

filenoFonction, qui renvoie le descripteur de fichier correspondant au flux de fichier, a échoué Return -1.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn