Explication TP système L3 ACAD C MEDJADBA TP1 gcc TP1.c -o tp1 //pour compiler

Explication TP système L3 ACAD C MEDJADBA TP1 gcc TP1.c -o tp1 //pour compiler un code .c ./tp1 argc: Argument Count : Le nombre de paramètres à passer argv: Argument Vector: tableau de chaine de caractères, chaque case est une chaine de caracteres: tableau argv Argv[0] : Nom de l'exécutable ex ./TP1 Argv[1]:paramètre 1 Argv[argc-1]: le dernier paramètres Explication TP système L3 ACAD C MEDJADBA TP2 Exercice1 man access access, faccessat - check user's permissions for a file #include <unistd.h> int access(const char *pathname, int mode); Explication TP système L3 ACAD C MEDJADBA Exercice02: man 2 open open, openat, creat - open and possibly create a file SYNOPSIS #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); Explication TP système L3 ACAD C MEDJADBA O_XCL 3- Q5 Explication TP système L3 ACAD C MEDJADBA #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <fcntl.h> int main(int argc, char **argv) { int i = 1; // initialisation du i int file; char buffer; if (argc < 2) { printf("Erreur: usage: ./cat nomfichier\n"); // vérification du nombre d'arguments return (-1); } while(i < argc){ // on met a boucle while pour parcourir tous les fichiers file = open(argv[i], O_RDONLY); // ouvrir en lecture seul if (file == -1) // traitment d'erreur { printf("Erreur: %s: fichier introuvable\n", argv[i]); return (-1); } while ( read(file, &buffer, 1)) != 0) // cette boucle est pour lire un seul fichier et afficher le contenu dans la sortie standard (1) write(1, &buffer, 1); close(file); i++; } return (0); } Explication TP système L3 ACAD C MEDJADBA Exercice3: #include<stdio.h> #include<stdlib.h> #include <unistd.h> #include <fcntl.h> int main(int argc, char const *argv[]) { char buf; int fd; int j; if (argc == 1) //verifier que le nom des fichier sont passer comme parametre printf("Manque d'arg !\n"); else { for (int i = 1; i < argc; i++) { //parcourir les fichiers fd = open(argv[i],O_RDONLY); // ouvrir le fichier en mode lecture seul if (fd==-1){ printf("Le fichier %s n'existe pas !\n",argv[1]); //afficher l'erreur en cas de erreur Explication TP système L3 ACAD C MEDJADBA exit(1); } else{ j=0; while(read(fd, &buf, 1))j++ ; printf("fichier %s numero %d \n",argv[i],i); //affiche le num de fichier printf("Nombre de caracteres : %d\n",j); close(fd); } } return EXIT_SUCCESS; } } Explication TP système L3 ACAD C MEDJADBA Explication TP système L3 ACAD C MEDJADBA TP2 partieII Exercice 1 SYNOPSIS #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname,int flags, mode_t mode); Un appel à open() crée une nouvelle description de fichier ouvert, une entrée dans la table des fichiers ouverts du système. Cette entrée enregistre la position dans le fichier et les attributs d'état du fichier (modifiable via l'opération F_SETFL de fcntl(2)). Un descripteur de fichier est une référence à l'une de ces entrées ; cette référence n'est pas affectée si pathname est ultérieurement supprimé ou modifié pour se référer à un fichier différent. La nouvelle description de fichier ouvert n'est initialement pas partagée avec un autre processus, mais ce partage peut survenir après un fork(2). Le paramètre flags doit inclure l'un des mode d'accès suivants : O_RDONLY, O_WRONLY ou O_RDWR. Ceux-ci réclament respectivement l'ouverture du fichier en lecture seule, écriture seule, ou lecture-écriture. À cette valeur peut être ajouté zéro ou plusieurs attributs de création de fichier et attributs d'état de fichier avec un OU binaire. Les attributs de création de fichier sont O_CREAT, O_EXCL, O_NOCTTY et O_TRUNC. Les attributs d'état de fichier sont tous les autres attributs restant listés plus loin. La différence entre ces deux groupes d'attributs est que l'on peut récupérer et (dans certains cas) modifier avec fcntl(2) les attributs d'état de fichier. La liste complète des attributs de création de fichier et des attributs d'état de fichier est la suivante : Nom Description pathname Ce paramètre permet d'indiquer le nom du fichier. oflag Ce paramètre permet d'indiquer le drapeau de mode d'ouverture (les constantes peuvent être combiné avec un caractère «|» sauf pour O_RDONLY, O_WRONLY et O_RDWR) : Constante Description O_RDONLY Cette constante permet d'indiquer qu'il faut ouvrir le fichier en mode lecture seulement. O_WRONLY Cette constante permet d'indiquer qu'il faut ouvrir le fichier en mode écriture seulement. O_RDWR Cette constante permet d'indiquer qu'il faut ouvrir le fichier en mode lecture et écriture. O_APPEND Cette constante permet d'indiquer que le déplacement du fichier doit être défini à la fin du fichier avant chaque écriture. O_CREAT Cette constante permet de créer le fichier. O_EXCL Cette constante permet d'indiquer que si le fichier existe, il ne peut pas être créé Explication TP système L3 ACAD C MEDJADBA et qu'il doit retourner un erreur dans errno. O_TRUNC Cette constante permet d'indiquer que le fichier doit avoir la taille de 0 octets et donc que les données sont effacé s'il existe et a été ouvert avec succès par O_RDWR ou O_WRONLY. mode mode indique les permissions à utiliser si un nouveau fichier est créé. Cet argument doit être fourni lorsque O_CREAT est spécifié dans flags ; si O_CREAT n'est pas spécifié, mode est ignoré. Les permissions effectives sont modifiées par l'umask du processus de manière classique : les permissions du fichier créé sont (mode & ~umask). Veuillez noter que ce mode ne s'applique qu'aux accès ultérieurs au fichier nouvellement créé. L'appel open() qui crée un fichier dont le mode est en lecture seule fournira quand même un descripteur de fichier en lecture et écriture. Constante Valeur Description S_IRWXU 00700 Cette valeur permet d'indiquer que l'utilisateur a la permission en lecture, écriture et d'exécution. S_IRUSR 00400 Cette valeur permet d'indiquer que l'utilisateur a la permission en lecture. S_IWUSR 00200 Cette valeur permet d'indiquer que l'utilisateur a la permission en écriture. S_IXUSR 00100 Cette valeur permet d'indiquer que l'utilisateur a la permission en exécution. S_IRWXG 00070 Cette valeur permet d'indiquer que le groupe a la permission en lecture, écriture et exécution. S_IRGRP 00040 Cette valeur permet d'indiquer que le groupe a la permission en lecture. S_IRGRP 00020 Cette valeur permet d'indiquer que le groupe a la permission en écriture. S_IXGRP 00010 Cette valeur permet d'indiquer que le groupe a la permission en exécution. S_IRWXO 00007 Cette valeur permet d'indiquer que tous ont la permission en lecture, écriture et d'exécution. S_IROTH 00004 Cette valeur permet d'indiquer que tous ont la permission en lecture. S_IWOTH 00002 Cette valeur permet d'indiquer que tous ont la permission en écriture. S_IXOTH 00001 Cette valeur permet d'indiquer que tous ont la permission en exécution. Retour Valeur Description -1 Cette valeur permet d'indiquer qu'une erreur s'est produite et la variable «errno» contiendra l'erreur. valeur entière != -1 Ces valeurs permettent d'indiquer qu'un descripteur pour le socket est accepté. Explication TP système L3 ACAD C MEDJADBA Retour Valeur Description -1 Cette valeur permet d'indiquer qu'une erreur s'est produite et la variable «errno» contiendra l'erreur. valeur entière != -1 open() et creat() renvoient le nouveau descripteur de fichier s'ils réussissent, ou -1 s'ils échouent, auq O_EXCL tjrs combiné avec O_CREAT mode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP| S_IROTH | S_IWOTH; rwx rw- rw- 3) la premiere fois ça marche la deuxieme fois: une erreur est déclenchée avec perror qui appartient à la bibliotheque fcntl.h 5) la valeur du masque dépondera de la machine 0002 ou 0022 6) Nous avons spécifié dans la variable mode le mode: rwx rw- rw- Explication TP système L3 ACAD C MEDJADBA et apres creation on le mode : rwx rw- r-- Ceci es tà cause du masque qui est égale à 0002 rwx rw- rw- = 111 110 110 = 766 766-002= 764 = : rwx rw- r-- Exercice02 i-nœuds(index node) Dans le système Unix/Linux toutes les informations des fichiers sont rassemblées dans une structure associée au fichier, appelée nœud d’information, i-nœud ou i-node. L’i-nœud contient les informations suivantes : le type du fichier (régulier, répertoire, caractère, bloc ou tube) ; le code de protection sur 9 bits ; l’identificateur et groupe du propriétaire ; les dates de création, du dernier accès et de la dernière modification ;; la La figure montre la structure typique d’un i-nœud. NOM stat, fstat, lstat - Obtenir l'état d'un fichier (file status) SYNOPSIS #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> Explication TP système L3 ACAD C MEDJADBA int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *path, struct stat *buf); Exigences de macros de test de fonctionnalités pour la glibc (voir feature_test_macros(7)) : lstat() : _BSD_SOURCE || _XOPEN_SOURCE >= 500 DESCRIPTION Ces fonctions renvoient des informations à propos d'un fichier. Aucune permission n'est nécessaire sur le fichier lui-même, mais vous devez --- dans le cas de stat() et lstat() --- avoir la permission d'exécution (parcours) pour tous les répertoires de path qui mènent au fichier. stat() récupère l'état du fichier pointé par path et remplit le tampon buf. lstat() est identique à stat(), sauf que si path est un lien symbolique, il donne l'état du lien lui-même plutôt que celui du fichier visé. fstat() est identique à stat(), sauf que le fichier ouvert est uploads/Philosophie/ tp1-tp2-systeme-l3-explication.pdf

  • 11
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager