


Comment appeler le système sous-jacent des fichiers d'exploitation 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
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()——打开或者创建一个文件
返回值类型: int——文件描述符fd,每打开一个文件,就会得到一个文件描述符,这个文件描述符是整形的,我们通过文件描述符进行读写操作。
失败:-1
成功:>= 0,即文件描述符;
mode_t是一个类型别名,实际上就是一个有符号的整数,对open函数而言,仅仅当创建新文件时才使用第三个参数
flag:打开标志
注意: 这些其实都是定义的一些宏,当需要使用到多个参数时,使用按位或“ |
”构成多个flag参数
也可跟随下面的方式一起使用:
其他不一一介绍,需要使用时自查。
write()
返回值:
若成功为已经写入的字节数;
若出错为-1;
注意:计划写入的字节数和函数的返回值不相等时,表示写入出现了错误,可以用来检验写入是否成功;
参数:
fd
:写入文件的文件描述符;buf
:存放待写数据的缓存;count
:要求写入一次数据的字节数;
注意:
对于普通文件,写操作从文件的当前位移量处开始,若如果在打开该文件时,指定了O_APPEND选择项,则在每次写操作之前,将文件位移量设置在文件的当前结尾处。在一次成功写之后,该文件位移量增加实际写的字节数。
read()
返回值 :读到的字节数
若已到文件尾为0;若出错为-1;
参数
fd
:读取文件的文件描述符;buf
:存放读取数据的缓存;count
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 drapeau

|
" pour former plusieurs paramètres de drapeau #🎜🎜##🎜🎜# peut également être utilisé de la manière suivante : #🎜🎜##🎜🎜#


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()#🎜🎜##🎜🎜#
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.
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
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 ;
-
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
d'où
: position de positionnement, c'est-à-dire le point de référence -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 ? Nombre de références (plusieurs processus utilisent ce fichier ouvert) Méthode d'ouverture : comme le mode lecture seule, le mode écriture seule
Test 2 : fork d'abord puis ouvrez le fichier Après avoir modifié le code, les résultats d'exécution changent comme suit : 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. Décalage du fichier (à partir de 0, le pointeur de fichier se décale au fur et à mesure que les données sont écrites)
Parce 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.
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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.

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.

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.

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

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.

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.

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.
