Table des matières
Fichier de tuyaux
Socket
Socket de domaine Unix
Sockets réseau
Périphériques blocs et périphériques caractères
Maison Opération et maintenance exploitation et maintenance Linux Introduction aux types de fichiers sous Linux

Introduction aux types de fichiers sous Linux

Feb 26, 2019 pm 04:16 PM
linux Type de fichier

Le contenu de cet article est de présenter plusieurs types de fichiers sous Linux. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. [Recommandation du didacticiel vidéo : Tutoriel Linux]

Sous le système Linux, il existe sept types de fichiers :

  • Fichiers ordinaires ( - )

  • Répertoire (d)

  • Lien logiciel (lien de caractère L)

  • Fichier(S) Socket

  • Périphérique(s) de caractère

  • Bloquer le périphérique (B)

  • Fichier pipe (nommé pipe P)

Les fichiers, répertoires et liens logiciels normaux ne nécessitent aucune explication supplémentaire. Jetons un coup d'œil aux fichiers de canal, aux fichiers de socket, aux périphériques de caractères et aux types de périphériques de bloc.

Fichier de tuyaux

Les tuyaux sont divisés en canaux anonymes et tuyaux nommés. Les tuyaux sont écrits à une extrémité et lus à l'autre extrémité. Il s'agit d'une transmission de données unidirectionnelle et leurs données sont transmises directement en mémoire. Les tuyaux sont un moyen de communication entre les processus, comme l'écriture du processus parent et la lecture du processus enfant. .

Dans le shell, le tube anonyme est un symbole de tube "|", tel que ls | grep xxx, où le processus correspondant à ls est le processus parent dans ce groupe de processus indépendant, et le processus correspondant à grep est le processus enfant. Le processus parent écrit les lectures du processus enfant.

Dans les langages de programmation, les canaux anonymes sont implémentés en créant deux descripteurs de fichiers ou descripteurs de fichiers (tels que A, B). Un descripteur de fichier est utilisé pour écrire des données (telles que la fin d'écriture A, la fin d'écriture de données en entrant A). le poussera automatiquement dans B), et un autre descripteur de fichier est utilisé pour lire les données (c'est-à-dire B).

Pour les canaux nommés, c'est-à-dire les canaux avec des noms, les canaux nommés conservent les fichiers dans le système de fichiers, cela est également appelé FIFO, qui est premier entré, premier sorti. Bien que le fichier de canal nommé soit conservé dans le système de fichiers, ce fichier n'est qu'un point d'entrée pour l'utilisation du canal nommé. Lorsque vous utilisez le canal nommé pour transmettre des données, cela est toujours effectué dans la mémoire, ce qui signifie qu'il ne sera pas conservé. sur le système de fichiers. Les canaux nommés sont moins efficaces.

Dans le shell, vous pouvez utiliser la commande mknod ou la commande mkfifo pour créer un canal nommé. Les canaux nommés sont très utiles lors de l'écriture de scripts shell avec certains besoins particuliers. En fait, la fonction des coroutines (à l'aide de la commande coproc) est prise en charge depuis Bash 4 (ksh et zsh prennent depuis longtemps en charge les coroutines), mais les besoins des coroutines peuvent être satisfaits via des canaux nommés.

Les tuyaux généraux sont une communication unidirectionnelle et ne peuvent pas réaliser la fonction de communication bidirectionnelle, c'est-à-dire qu'ils ne peuvent qu'écrire et lire en même temps, mais ne peuvent pas lire et écrire des deux côtés. Si vous souhaitez établir une communication bidirectionnelle, vous pouvez créer deux canaux (il y a donc 4 descripteurs de fichiers, deux extrémités de lecture et deux extrémités d'écriture) ou utiliser un socket plus pratique.

Socket

Socket est utilisé pour réaliser la communication entre les deux extrémités. Comme analysé ci-dessus, il peut réaliser la fonction de communication inter-processus du pipeline bidirectionnel. De plus, les sockets peuvent également réaliser une communication inter-processus entre les hôtes via le réseau.

Les sockets doivent être appariées pour avoir un sens, c'est-à-dire qu'elles sont divisées en deux extrémités. Chaque extrémité a un descripteur de fichier (ou descripteur de fichier) pour la lecture et l'écriture, ce qui équivaut à deux communications bidirectionnelles. tuyaux.

Les sockets sont répartis en deux catégories selon la famille de protocoles : les sockets réseau (de type AF_INET, divisés en inet4 et inet6 selon ipv4 et ipv6) et les sockets de domaine Unix (de type AF_UNIX). Bien entendu, à partir de la famille de protocoles, les sockets peuvent être subdivisés en plusieurs types. Par exemple, les sockets INET peuvent être divisés en sockets TCP, sockets UDP, sockets de couche de liaison, sockets Raw, etc. Parmi eux, les sockets réseau constituent le fondement et le cœur de la programmation réseau.

Socket de domaine Unix

Pour la communication inter-processus sur une seule machine, il est préférable d'utiliser le socket de domaine Unix plutôt que le socket Inet, car le socket de domaine Unix n'a pas de composant de communication réseau, et il suffit manque de beaucoup de fonctions réseau et est plus léger. En fait, les fonctions de pipeline implémentées par certains langages sur certaines plates-formes de systèmes d'exploitation sont implémentées via le domaine Unix, et on peut imaginer sa grande efficacité.

Le socket de domaine Unix a deux descripteurs de fichiers (tels que A, B). Les deux descripteurs de fichiers sont lisibles et inscriptibles en même temps. Lorsque le processus 1 écrit des données sur A, elles seront automatiquement transmises à B. Le processus 2 peut lire les données écrites de A à partir de B. De même, lorsque le processus 2 écrit des données sur B, elles seront automatiquement transmises à A. Le processus 1 peut lire les données écrites de B à partir de A. Comme suit :

进程1            进程2
------------------------
A   ----------->  B
B   ----------->  A

Dans les langages de programmation, la création d'un socket de domaine Unix a naturellement des fonctions correspondantes pour le créer facilement (peut être man socketpair). Pour le shell bash, vous pouvez le créer via la commande nc (NetCat), ou simplement utiliser deux canaux nommés pour implémenter les fonctions correspondantes. Si nécessaire, vous pouvez apprendre à utiliser les sockets de domaine Unix dans le shell bash.

Sockets réseau

Pour la communication inter-processus sur un réseau, des sockets réseau sont nécessaires. Chaque socket réseau est composée de 5 parties, appelées les 5 tuples du socket. Le format est le suivant :

{protocol, src_addr, src_port, dest_addr, dest_port}

c'est à dire protocole, adresse source, port source, adresse de destination, port de destination.

Chaque extrémité du socket a deux tampons dans l'espace du noyau (c'est-à-dire qu'une paire de sockets a 4 tampons), et chaque extrémité a un tampon de réception et un tampon d'envoi. Le processus 1 écrit des données dans le tampon d'envoi de son propre socket, qui seront envoyées au tampon recv du homologue, puis le processus 2 du homologue peut lire les données du tampon recv, et vice versa.

Mais avant de pouvoir réellement lire et écrire sur la prise réseau, la prise réseau a encore besoin de quelques paramètres. Une fois le socket serveur créé (fonction socket(), il y aura un descripteur de fichier ou un descripteur de fichier pour les opérations de lecture et d'écriture), il doit également lier l'adresse (via la fonction bind()) et le port d'écoute (via Listen ( )), le client n'a qu'à créer le socket et utiliser directement la fonction connect() pour lancer une demande de connexion au socket du serveur.

Pour les sockets TCP, lorsque le client initie une demande de connexion, cela signifie qu'il doit effectuer une négociation à trois avec le serveur (complété par le noyau et n'a rien à voir avec le processus de l'espace utilisateur). Décomposez chacune de ces trois poignées de main. La première fois que le client envoie une requête SYN, une fois que le serveur a reçu le SYN, le noyau place la connexion dans la file d'attente de synchronisation et définit le statut sur syn-recv, puis envoie ack+syn à Côté client, après avoir reçu l'accusé de réponse du client, le noyau déplace la connexion de la file d'attente de synchronisation vers la file d'attente établie (ou la file d'attente d'acceptation) et marque l'état de la connexion comme établi. Enfin, le processus en attente d'espace utilisateur lance l'appel système accept() pour permettre au noyau de le supprimer de la file d'attente d'acceptation. La connexion après avoir été acceptée() indique que la connexion a été établie, ce qui peut véritablement réaliser la transmission de données entre les processus aux deux extrémités.

Pour en savoir plus sur les principes des sockets TCP, consultez mon autre article : Le processus de connexion socket et TCP à connaître absolument.

Périphériques blocs et périphériques caractères

Les périphériques blocs sont des périphériques matériels qui se distinguent par un accès aléatoire (pas nécessairement séquentiel) à des blocs de données de taille fixe. Un morceau de taille fixe est appelé un bloc. Le périphérique bloc le plus courant est le disque dur, mais de nombreux autres périphériques bloc existent également, tels que les lecteurs de disquettes, les lecteurs Blu-ray et la mémoire flash. Notez qu'il s'agit de périphériques sur lesquels des systèmes de fichiers sont montés, et que les systèmes de fichiers sont comme une lingua franca pour les périphériques bloc.

Les appareils de caractères sont accessibles via un flux continu de données, octet après octet. Les dispositifs de caractères typiques sont les terminaux (il existe de nombreux types de terminaux, à la fois physiques et virtuels) et le clavier .

Le moyen le plus simple de distinguer les périphériques bloc et les périphériques caractère est d'examiner la manière dont les données sont accessibles. Les périphériques de bloc sont accessibles de manière aléatoire pour obtenir des données, et les périphériques de caractères doivent être accessibles dans l'ordre des octets.

Si vous pouvez lire un peu de données ici, lire un peu de données là, et enfin les enchaîner en une donnée continue, alors il s'agit d'un périphérique bloc, tout comme les données sur le disque dur sont discontinues et il peut être nécessaire d'y accéder via une méthode d'accès aléatoire pour obtenir une donnée. Par exemple, dans un fichier légèrement plus volumineux sur un disque, les 10 000 premières données peuvent se trouver dans des blocs de données contigus ou dans des secteurs contigus, et les 10 000 données suivantes peuvent être éloignées ou même sur des cylindres différents.

Si chaque octet d'une donnée est dans le même ordre d'octets que lors de l'accès, c'est-à-dire que l'ordre des octets est complètement cohérent depuis le moment de l'accès jusqu'au traitement final des données, alors il s'agit d'un dispositif de caractère. En d’autres termes, les périphériques de caractères peuvent être considérés comme des périphériques de flux. Tout comme la saisie de données sur un clavier, si deux touches sont enfoncées en continu, les données en octets correspondant à ces deux touches doivent être saisies d'abord au recto puis au verso lors de leur réception. De la même manière, le terminal fonctionne de la même manière Lorsque le programme envoie des données au terminal, le programme affiche d'abord la lettre a, puis le chiffre 3. Ensuite, lorsqu'il est affiché sur le terminal, a doit être devant et 3 devant. le dos.

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

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.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

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)

Sujets chauds

Comment traiter dans la politique de planification FIFO Linux Linux Comment traiter dans la politique de planification FIFO Linux Linux Sep 03, 2025 pm 12:39 PM

Pour effectuer des processus Linux exécutés dans la planification FIFO en temps réel, vous devez utiliser l'appel système CHRT ou Sched_Setscheduler pour définir la stratégie et la priorité de la planification, telles que Sudochrt-F99./App ou configurer sched_fifo et paramètres prioritaires dans le programme C, et assurez-vous que le processus a CAP_SYS_NICE CONDITIONS ou PRÉMITION ROAD PERMITIONS, et Configurer RTPio et MEMLOC Assurez-vous une réalité et évitez l'inversion prioritaire. Vous devez utiliser un mutex qui prend en charge l'héritage prioritaire.

Lien d'installation d'iPhone de l'assistant d'assistant d'assistant authentique de l'assistant AISI Lien d'installation d'iPhone de l'assistant d'assistant d'assistant authentique de l'assistant AISI Sep 16, 2025 am 11:30 AM

Le portail de téléchargement officiel de l'assistant AISI est situé sur le site officiel https://www.i4.cn/, et fournit des téléchargements informatiques et mobiles, prise en charge de la gestion des périphériques, de l'installation d'applications, de la commutation de mode, de la projection d'écran et de la gestion des fichiers.

Comment exécuter les programmes Windows sur Linux Comment exécuter les programmes Windows sur Linux Sep 18, 2025 am 03:25 AM

TorunwindowsProgramSonLinux, TryTheseMethods: 1.Usewinetodirectlyrun.exefiles.2.installplayonLinuxforeasierwinemanagement.3.SetUpawindowsVirtualMachinewithVirtualBox.4USELULUTRISTOINSTALLANDRUNWINDOWSGAMINEWORD.

Le système Huawei Harmonyos 6 annule le 'prochain' suffixe: ce sera Hongmeng natif à l'avenir Le système Huawei Harmonyos 6 annule le 'prochain' suffixe: ce sera Hongmeng natif à l'avenir Sep 24, 2025 pm 04:12 PM

Les dernières nouvelles du 18 septembre, Huawei HarmonyOS6 a lancé plusieurs cycles de version prévisibles pour les développeurs, et a récemment ouvert la qualification d'expérience à certains utilisateurs qui l'ont essayé pour la première fois. Selon les commentaires de l'utilisateur, le nom du système actuel n'affiche plus le suffixe "suivant", et il est officiellement renommé HarmonyOS6.0. Huawei a initialement proposé le nom HarmonyOsnext pour la première fois lors de la conférence des développeurs en août 2023, visant à marquer le système Hongmeng entrant dans une nouvelle étape de développement et réalisant le véritable développement auto-autonome indigène. La percée la plus principale de HarmonyOsNext est d'adopter complètement l'architecture du système sous-jacente développée indépendamment, de supprimer complètement le noyau Linux et le code AOSP Android, et d'exécuter uniquement des applications basées sur le noyau Harmonyos.

Comment gérer les utilisateurs et les groupes sur un système Linux Comment gérer les utilisateurs et les groupes sur un système Linux Sep 05, 2025 am 08:01 AM

Créer un utilisateur avec AddUser ou UserAdd, 2. Modifier l'utilisateur avec UserMod, 3. Supprimer l'utilisateur avec DeLuerger ou UserDel, 4. Créer un groupe avec GroupAdd, 5. Ajouter un utilisateur à Group avec UserMod-Ag, 6. Supprimer les informations avec GPASSWD-D à partir du groupe, 7. Comptes, définition des politiques de mot de passe et allouant raisonnablement les autorisations de groupe. En maîtrisant ces commandes principales et en sélectionnant des outils appropriés en fonction de la distribution, la gestion des utilisateurs et groupes Linux peut être réalisé efficacement.

Comment prendre une capture d'écran sur Linux Comment prendre une capture d'écran sur Linux Sep 15, 2025 am 03:35 AM

TotakesCreenshotSonLinux: 1.USEPRTSCNKEYFORFULLSREEN, ALT PRTSCNFORACTIALWINDOW.2.UsegnomesReenshottoolFormoreOptions.3.Usegnome-ScreenshotCommandInterminal.4.InstalLanduscrotForlightWeARDCommand-linecapturing.

Comment trouver le chemin d'un programme dans Linux Comment trouver le chemin d'un programme dans Linux Sep 16, 2025 am 08:56 AM

TolocateAprogram'sinstallationPathonLinux, Utilisation: 1.Whichprogram_NameforquickPath-basés-basés sur la base.2.Harons de l'Isprogramme

Comment installer les pilotes Nvidia sur Linux Comment installer les pilotes Nvidia sur Linux Sep 15, 2025 am 03:46 AM

IfyoufacedisplayorporformancesUSUSSUSSHAGELINSTALLINGNVIDIDIVERSONLINUX, SuivretheSesteps: 1.IdentifyyourgpumodeLusingLspci.2.UseyOrdistribution’spackageManGerTOnStallthereComMendDriver.3.Optional, téléchargement AndinStalltOnStalltHereComMendDriver.3.

See all articles