Table des matières
open()——打开或者创建一个文件
write()
read()
mode_t est un alias de type, qui est en fait un entier signé Pour la fonction open, le troisième paramètre n'est utilisé que lors de la création d'un nouveau fichier#🎜🎜 ##🎜. 🎜#
Maison Opération et maintenance exploitation et maintenance Linux Comment appeler le système sous-jacent des fichiers d'exploitation Linux

Comment appeler le système sous-jacent des fichiers d'exploitation Linux

May 15, 2023 pm 09:25 PM
linux

Le système d'exploitation Linux poursuit le concept selon lequel tout est un fichier. Presque tous les périphériques de fichiers peuvent être utilisés avec un ensemble d'appels système, à savoir open()/close()/write()/read(), etc. Les appels système sont similaires aux appels de la bibliothèque C dans les fichiers d'exploitation. Le manuel manuel fourni avec Linux fait le plus autorité. Vérifiez l'utilisation des appels système en consultant le manuel de l'utilisateur.

nom de code—— Ce qu'il représente

  • 1 —— environnement shell Commandes exploitables/exécutables

  • 2 —— Fonctions et outils appelables du noyau système

  • #🎜 🎜#3 —— Certaines fonctions et bibliothèques de fonctions couramment utilisées, la plupart des bibliothèques de fonctions C

  • 4 ——

  • 5 —— Fichiers de configuration ou formats de certains fichiers

  • 6 ——

  • 7 —— Gestion et protocoles, tels que les systèmes de fichiers Linux, les protocoles réseau, etc.

    #🎜 🎜##🎜 🎜#8 —— Commandes disponibles pour les administrateurs système
  • 9 —— 🎜#Notez que les fichiers d'en-tête système sont généralement stockés dans le répertoire /usr/include sous Linux ; certains des fichiers d'en-tête inclus ci-dessous incluent sys, qui incluent en fait le fichier d'en-tête dans le sous-répertoire ci-dessous#🎜 🎜#
  • open()——Ouvrir ou créer un fichier
  • Comment appeler le système sous-jacent des fichiers d'exploitation Linux

Type de valeur de retour :

int&mdash ;—Descripteur de fichier fd, each chaque fois que vous ouvrez un fichier, vous obtiendrez un descripteur de fichier. Ce descripteur de fichier est un entier. Nous effectuons des opérations de lecture et d'écriture via le descripteur de fichier. /usr/include目录下;下面包含的一些头文件有的带了sys,其实是include底下的子目录中的头文件

open()——打开或者创建一个文件

Comment appeler le système sous-jacent des fichiers dexploitation Linux

返回值类型: int——文件描述符fd,每打开一个文件,就会得到一个文件描述符,这个文件描述符是整形的,我们通过文件描述符进行读写操作。

  • 失败:-1

  • 成功:>= 0,即文件描述符;

  • mode_t是一个类型别名,实际上就是一个有符号的整数,对open函数而言,仅仅当创建新文件时才使用第三个参数

flag:打开标志

Comment appeler le système sous-jacent des fichiers dexploitation Linux

注意: 这些其实都是定义的一些宏,当需要使用到多个参数时,使用按位或“ | ”构成多个flag参数

也可跟随下面的方式一起使用:

Comment appeler le système sous-jacent des fichiers dexploitation Linux

Comment appeler le système sous-jacent des fichiers dexploitation Linux

Comment appeler le système sous-jacent des fichiers dexploitation Linux

其他不一一介绍,需要使用时自查。

write()

Comment appeler le système sous-jacent des fichiers dexploitation Linux

返回值

  • 若成功为已经写入的字节数;

  • 若出错为-1;

注意:计划写入的字节数和函数的返回值不相等时,表示写入出现了错误,可以用来检验写入是否成功;

参数:

  • fd:写入文件的文件描述符;

  • buf:存放待写数据的缓存;

  • count:要求写入一次数据的字节数;

注意:

对于普通文件,写操作从文件的当前位移量处开始,若如果在打开该文件时,指定了O_APPEND选择项,则在每次写操作之前,将文件位移量设置在文件的当前结尾处。在一次成功写之后,该文件位移量增加实际写的字节数。

read()

Comment appeler le système sous-jacent des fichiers dexploitation Linux

返回值 :读到的字节数

  • 若已到文件尾为0;若出错为-1;

参数

  • fd:读取文件的文件描述符;

  • buf:存放读取数据的缓存;

  • count

Échec : -1

Succès : >= 0, qui est le descripteur de fichier # ; 🎜 🎜#

mode_t est un alias de type, qui est en fait un entier signé Pour la fonction open, le troisième paramètre n'est utilisé que lors de la création d'un nouveau fichier#🎜🎜 ##🎜. 🎜#

flag:Ouvrir le drapeauComment appeler le système sous-jacent des fichiers dexploitation Linux

Comment appeler le système sous-jacent des fichiers d'exploitation Linux#🎜🎜##🎜🎜##🎜🎜#Remarque : #🎜🎜# Ce sont en fait des macros définies, quand vous devez les utiliser Lors de l'utilisation un paramètre, utilisez au niveau du bit ou "|" pour former plusieurs paramètres de drapeau #🎜🎜##🎜🎜# peut également être utilisé de la manière suivante : #🎜🎜##🎜🎜#Comment appeler le système sous-jacent des fichiers d'exploitation Linux#🎜🎜##🎜🎜##🎜🎜##🎜 🎜# Comment appeler le système sous-jacent des fichiers d'exploitation Linux#🎜🎜 ##🎜🎜 #Les autres ne seront pas présentés un par un, veuillez vérifier vous-même quand vous devez les utiliser. #🎜🎜##🎜🎜#write()#🎜🎜##🎜🎜#Comment appeler le système sous-jacent des fichiers d'exploitation Linux#🎜🎜##🎜🎜##🎜🎜#Valeur de retour #🎜🎜# : #🎜🎜##🎜🎜##🎜🎜##🎜🎜#If réussi, c'est le nombre d'octets qui ont été écrits #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Si une erreur se produit, c'est -1 ; ##🎜🎜#Remarque : prévoyez d'écrire Lorsque le nombre d'octets saisi n'est pas égal à la valeur de retour de la fonction, cela signifie qu'il y a une erreur d'écriture, qui peut être utilisée pour vérifier si l'écriture a réussi # ; 🎜🎜##🎜🎜##🎜🎜#Paramètres : #🎜🎜##🎜 🎜##🎜🎜##🎜🎜##🎜🎜#fd : Descripteur de fichier pour l'écriture de fichiers #🎜 ; 🎜##🎜🎜##🎜🎜##🎜🎜# buf : Cache qui stocke les données à écrire ; count : Le nombre d'octets requis pour écrire des données une fois ; Pour les fichiers ordinaires, l'opération d'écriture commence à partir du déplacement actuel du fichier. Si lorsque le fichier est ouvert et que l'option O_APPEND est spécifiée, le décalage du fichier est défini sur la fin actuelle du fichier avant chaque opération d'écriture. Après une écriture réussie, le décalage du fichier est augmenté du nombre d'octets réellement écrits. #🎜🎜##🎜🎜#read()#🎜🎜##🎜🎜#Comment appeler le système sous-jacent des fichiers d'exploitation Linux#🎜🎜##🎜🎜##🎜🎜#Valeur de retour #🎜🎜# : Nombre d'octets lus #🎜🎜##🎜🎜##🎜🎜## 🎜🎜#Si la fin du fichier a été atteinte, ce sera 0 ; s'il y a une erreur, ce sera -1 #🎜🎜##🎜🎜#fd : Le descripteur du fichier ; du fichier lu ; #🎜🎜##🎜🎜##🎜🎜##🎜🎜#buf : Cache qui stocke les données lues ; 🎜#count : Le nombre d'octets requis pour lire les données une fois ; notez que la valeur de retour est la lecture réelle. Le nombre d'octets n'est pas le même 🎜#Start, avant de réussir le retour, le déplacement est augmenté du nombre d'octets réellement lus (ce déplacement peut être paramétré par vous-même #🎜🎜##🎜🎜#close()#🎜🎜##🎜🎜# #🎜🎜##🎜🎜#) ;

Remarque : Lorsqu'un processus se termine, tous les fichiers qu'il ouvre sont automatiquement fermés par le noyau.

Comment appeler le système sous-jacent des fichiers dexploitation Linux

Remarque : Ces fonctions sans cache sont toutes des appels système fournis par le noyau ; c'est exactement ce que nous faisons ; Les différences entre ces opérations d'E/S apprises en langage C ne font pas partie du standard C, mais de POSIX.

Lorsque le standard C opère sur des fichiers, il opère sur le pointeur de structure de FILE, et le descripteur de fichier est utilisé ici.

La plage des descripteurs de fichiers est 0 - OPEN MAX. La limite supérieure adoptée par les premiers Unix était de 19 (c'est-à-dire que chaque processus est autorisé à ouvrir 20 fichiers). Désormais, de nombreux systèmes l'augmenteront. à 63. Linux est 1024. Le numéro spécifique peut être trouvé dans le fichier d'en-tête de .

Comment appeler le système sous-jacent des fichiers dexploitation Linux

Comment appeler le système sous-jacent des fichiers dexploitation Linux

Descripteur de fichier et pointeur de fichier

# 🎜🎜#
  • FILE *fdopen(int fd, const char *mode), convertit le descripteur de fichier en pointeur de fichier

  • int ; fileno(FILE *stream), convertit le pointeur de fichier en descripteur de fichier ; 🎜# Localiser un fichier ouvert

    off_t lseek(int fd,off_t offset,int whence);
    Copier après la connexion

fd:Descripteur de fichier ouvert ;

#🎜 🎜#décalage : montant du déplacement ;

    d'où : position de positionnement, c'est-à-dire le point de référence
  • fd:已经打开的文件描述符;

  • offset:位移量;

  • whence:定位的位置,即基准点

  • SEEK_SET:将该文件的位移量设置为距文件开始处offset个字节;

  • SEEK_CUR:将该文件的位移量设置为其当前值加offset,offset可正可负;

  • SEEK_END

    SEEK_SET : Définissez le décalage du fichier pour décaler les octets à partir du début du fichier ;
  • #🎜 🎜#
  • # ; 🎜🎜#SEEK_CUR : Définissez le déplacement du fichier sur sa valeur actuelle plus le décalage, et le décalage peut être positif ou négatif ; code>SEEK_END : définissez le déplacement du fichier sur la longueur du fichier plus le décalage. Le décalage peut être positif ou négatif (s'il s'agit d'une valeur positive à ce moment-là, il s'agit d'un fichier de trous, veuillez voir l'explication ci-dessous) ;

  • Valeur de retour : ** En cas de succès, renvoie le nouveau déplacement du fichier (déplacement absolu) ** S'il y a une erreur, -1 ; la taille du fichier peut être renvoyée ; Un tube ou FIFO, puis lseek renvoie -1 et définit errno sur
    #include<stdio.h>
    #include<fcntl.h>
    #include<string.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<errno.h>
    
    //生成空洞文件
    char *buffer = "0123456789";
    
    int main(int argc,char *argv[])
    {
    	if(argc < 2)
    	{
    		fprintf(stderr,"-usage:%s [file]\n",argv[0]);
    		exit(1);
    	}
    
    	int fd = open(argv[1],O_WRONLY | O_CREATE | O_TRUNC,0777);
    	if(fd < 0)
    	{
    		perror("open error");
    		exit(1);
    	}
    
    	size_t size = strlen(buffer) * sizeof(char);
    	//将字符串写入到空洞文件中
    	if(write(fd,buffer,size) != size)
    	{
    		perror("write error");
    		exit(1);
    	}
    	
    	//定位到文件尾部的10个字节处
    	if(lseek(fd,10L;SEERK_END) < 0)
    	{
    		perror("lseek error");
    		exit(1);
    	}
    	//从文件尾部的10个字节处再写入字符串
    	if(write(fd,buffer,size) != size)
    	{
    		perror("write error");
    		exit(1);
    	}
    	close(fd);
    	return 0;
    }
    Copier après la connexion

Nous pouvons le voir en utilisant le more ; commande pour visualiser le contenu du fichier, nous constatons que le contenu affiché n'est que le résultat d'une écriture unique, utilisez la commande od

-c pour visualiser le code ASSCI du fichier, nous trouverons qu'entre les deux contenu, il y a 10

  • Ouvrez un nouveau fichier

  • Lisez une partie du fichier binaire d'origine et écrivez-la dans le nouveau fichier

  • Lisez et écrivez à plusieurs reprises

  • jusqu'à ce que la lecture soit terminée, puis arrêtez-vous après l'écriture【lire( ) == 0 est utilisé comme condition d'arrêt de la boucle. S'il ne peut pas être lu, cela signifie qu'il est terminé. fichier, le processus enfant du fork peut-il partager l'accès avec le processus parent ?

  • Chaque fois que nous ouvrons un fichier, une structure telle qu'un fichier struct sera générée dans le noyau pour représenter le fichier ouvert et enregistrer les informations suivantes :
  • Comment appeler le système sous-jacent des fichiers dexploitation LinuxDécalage du fichier (à partir de 0, le pointeur de fichier se décale au fur et à mesure que les données sont écrites)

    Nombre de références (plusieurs processus utilisent ce fichier ouvert) Comment appeler le système sous-jacent des fichiers dexploitation Linux

    nœud inode (stocke les informations d'attribut du processus : qui l'a créé, quel est son nom, dans Où est le disque stocké ? Grâce à ce nœud inode, nous pouvons trouver le fichier spécifique correspondant)

    Comment appeler le système sous-jacent des fichiers dexploitation Linux

    Méthode d'ouverture : comme le mode lecture seule, le mode écriture seule

    • Test 1 : Ouvrez d'abord le fichier puis fork
    • close(fd) est écrit sur le côté le plus extérieur, et les processus parent et enfant seront fermés à chaque fois qu'ils seront fermés, le nombre de références sera décrémenté de 1 jusqu'à ce qu'il atteigne 0.

      Les résultats d'exécution sont les suivants :
    • Les raisons sont les suivantes :

    Test 2 : fork d'abord puis ouvrez le fichierComment appeler le système sous-jacent des fichiers dexploitation Linux

    Après avoir modifié le code, les résultats d'exécution changent comme suit :

    Comment appeler le système sous-jacent des fichiers dexploitation LinuxParce que les processus parent et enfant sont séparés. Ensuite, les fichiers respectifs sont ouverts, les fichiers de structure respectifs sont générés et les décalages de fichiers ne sont plus partagés.

    Dans les scénarios d'application réels, nous utilisons principalement les fichiers ouverts par le processus parent et les processus enfants pour accéder à ce formulaire.

    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 de ce site Web
    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

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    Video Face Swap

    Video Face Swap

    Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

    Logiciel d'édition de code au niveau de Dieu (SublimeText3)

    Quelle configuration de l'ordinateur est requise pour VScode Quelle configuration de l'ordinateur est requise pour VScode Apr 15, 2025 pm 09:48 PM

    Vs Code Système Exigences: Système d'exploitation: Windows 10 et supérieur, MacOS 10.12 et supérieur, processeur de distribution Linux: minimum 1,6 GHz, recommandé 2,0 GHz et au-dessus de la mémoire: minimum 512 Mo, recommandée 4 Go et plus d'espace de stockage: Minimum 250 Mo, recommandée 1 Go et plus d'autres exigences: connexion du réseau stable, xorg / wayland (Linux) recommandé et recommandée et plus

    VScode ne peut pas installer l'extension VScode ne peut pas installer l'extension Apr 15, 2025 pm 07:18 PM

    Les raisons de l'installation des extensions de code vs peuvent être: l'instabilité du réseau, les autorisations insuffisantes, les problèmes de compatibilité système, la version de code vs est trop ancienne, un logiciel antivirus ou des interférences de pare-feu. En vérifiant les connexions réseau, les autorisations, les fichiers journaux, la mise à jour vs du code, la désactivation des logiciels de sécurité et le redémarrage du code ou des ordinateurs, vous pouvez progressivement dépanner et résoudre les problèmes.

    Peut-on utiliser pour mac Peut-on utiliser pour mac Apr 15, 2025 pm 07:36 PM

    VS Code est disponible sur Mac. Il a des extensions puissantes, l'intégration GIT, le terminal et le débogueur, et offre également une multitude d'options de configuration. Cependant, pour des projets particulièrement importants ou un développement hautement professionnel, le code vs peut avoir des performances ou des limitations fonctionnelles.

    Qu'est-ce que VScode pour quoi est VScode? Qu'est-ce que VScode pour quoi est VScode? Apr 15, 2025 pm 06:45 PM

    VS Code est le code Visual Studio Nom complet, qui est un éditeur de code multiplateforme gratuit et open source et un environnement de développement développé par Microsoft. Il prend en charge un large éventail de langages de programmation et fournit une mise en surbrillance de syntaxe, une complétion automatique du code, des extraits de code et des invites intelligentes pour améliorer l'efficacité de développement. Grâce à un écosystème d'extension riche, les utilisateurs peuvent ajouter des extensions à des besoins et des langues spécifiques, tels que les débogueurs, les outils de mise en forme de code et les intégrations GIT. VS Code comprend également un débogueur intuitif qui aide à trouver et à résoudre rapidement les bogues dans votre code.

    Comment utiliser vscode Comment utiliser vscode Apr 15, 2025 pm 11:21 PM

    Visual Studio Code (VSCODE) est un éditeur de code Open Source, Open Source et gratuit développé par Microsoft. Il est connu pour son léger, l'évolutivité et le support pour une large gamme de langages de programmation. Pour installer VScode, veuillez visiter le site officiel pour télécharger et exécuter l'installateur. Lorsque vous utilisez VSCODE, vous pouvez créer de nouveaux projets, modifier le code, déboguer le code, naviguer dans les projets, développer VSCODE et gérer les paramètres. VScode est disponible pour Windows, MacOS et Linux, prend en charge plusieurs langages de programmation et fournit diverses extensions via Marketplace. Ses avantages incluent le léger, l'évolutivité, le support linguistique étendu, les fonctionnalités riches et la version

    Comment exécuter le code Java dans le bloc-notes Comment exécuter le code Java dans le bloc-notes Apr 16, 2025 pm 07:39 PM

    Bien que le bloc-notes ne puisse pas exécuter directement le code Java, il peut être réalisé en utilisant d'autres outils: à l'aide du compilateur de ligne de commande (Javac) pour générer un fichier bytecode (filename.class). Utilisez l'interpréteur Java (Java) pour interpréter ByteCode, exécuter le code et sortir le résultat.

    Quel est le but principal de Linux? Quel est le but principal de Linux? Apr 16, 2025 am 12:19 AM

    Les principales utilisations de Linux comprennent: 1. Système d'exploitation du serveur, 2. Système intégré, 3. Système d'exploitation de bureau, 4. Environnement de développement et de test. Linux excelle dans ces domaines, offrant des outils de stabilité, de sécurité et de développement efficaces.

    Comment vérifier l'adresse de l'entrepôt de Git Comment vérifier l'adresse de l'entrepôt de Git Apr 17, 2025 pm 01:54 PM

    Pour afficher l'adresse du référentiel GIT, effectuez les étapes suivantes: 1. Ouvrez la ligne de commande et accédez au répertoire du référentiel; 2. Exécutez la commande "git Remote -v"; 3. Affichez le nom du référentiel dans la sortie et son adresse correspondante.

    See all articles