# **************************************************************************** # # # # ::: :::::::: # # README.org :+: :+: :+: # # +:+ +:+ +:+ # # By: tmaze +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2018/10/26 13:33:24 by tmaze #+# #+# # # Updated: 2018/10/28 17:53:30 by tmaze ### ########.fr # # # # **************************************************************************** # #+AUTHOR: tmaze #+TITLE: 42Minishell /Minishell project from Ecole 42/ * Fonctions authorisées ** =int access(const char *path, int mode)= =#include = permet de vérifier si le fichier désigné par =path= est accessible selon les permissions indiquées par =mode=. *** valeurs possibles de =mode= | valeur | description | |--------+-----------------------------------| | R_OK | fichier lisible ? | | W_OK | fichier ecrivable ? | | X_OK | fichier exacutable/recherchable ? | | F_OK | fichier existe ? | *** valeurs de retour | valeur | description | |--------+-----------------------------| | =0= | succès | | =-1= | erreur (met à jour =errno=) | ** fonctions de manipulation de =file descriptors= *** =int open (const char *path, int oflag, ...)= =#include = ouvre le fichier spécifié par =path= en lecture et/ou écriture selon =oflag=. le =file descriptor= ainsi créé est retourné. **** l'argument =oflag= l'argument =oflag= permet de paramétrer le =fd= en liant différents flags par =or= (=|=). | valeur | description | |--------------+--------------------------------------------| | =O_RDONLY= | ouvrir le =fd= en leture seule | | =O_WRONLY= | ouvrir le =fd= en écriture seule | | =O_RDWR= | ouvrir le =fd= en lecture et écriture | | =O_APPEND= | commencer l'écriture en fin de fichier | | =O_CREAT= | créer le fichier si inexistant | | =O_EXCL= | erreur si O_CREAT | | =O_NOFOLLOW= | ne pas suivre les liens symboliques | | =O_SYMLINK= | authorise l'ouverture de liens symboliques | **** valeurs de retour En cas de succès, =open= retourne un entier positif désignant un =fd=. Sinon, la valeur =-1= est retournée et =errno= est modifiée pour indiquer l'erreur. *** =int close(int filedes)= =#include = Supprime le descripteur =filedes= correctement. Bien que si un process quitte, les =file descriptors= associés sont =free='d, =clean= s'occupe aussi de rendre le =fd= réutilisable, le nombre maximum de =fd= étant limité. **** valeurs de retour | valeur | escription | |--------+-----------------------------| | =0= | succès | | =-1= | erreur (met à jour =errno=) | *** =ssize_t read(int filedes, void *buf, size_t nbyte)= =#include = =#include = =#include = Essaie de lire =nbyte= de données de l'objet référencé par =filedes= dans le buffer =buf=. Pour les objets capable de recherche, la lecture démarre à la position indiquée par le pointeur associé à =filedes=. Après le retour de =read=, ce pointeur est incrémenté du nombre d'octets lu. Pour les objets non-capable de recherche, la lecture se fait toujours de la même position et le pointeur associé à =filedes= est non-défini. **** valeurs de retour | valeur | description | |--------+-----------------------------| | =>0= | succès (nb d'octets lus) | | =0= | succès et fin de fichier | | =-1= | erreur (met à jour =errno=) | *** =ssize_t write(int filedes, const void *buf, size_t nbyte)= =#include = Essaie d'écrire =nbyte= de données sur l'objet référencé par =filedes= depuis le buffer =buf=. Pour les objets capable de recherche, l'écriture démarre à la position indiquée par le pointeur associé à =filedes=. Après le retour de =write=, ce pointeur est incrémenté du nombre d'octets écrits. Pour les objets non-capable de recherche, l'écriture se fait toujours de la même position et le pointeur associé à =filedes= est non-défini. Si l'utilisateur n'est pas =super-user=, alors =write= supprime le bit =set-user-id= du fichier. Ceci prévient une faille de sécurité où un utilisateur pourrais "capturer" un =fd= ouvert sur un ficher appartenant au =super-user= disposant du bit =set-user-id=. **** valeurs de retour | valeur | description | |--------+-----------------------------| | =>0= | succès (nb d'octets écrits) | | =0= | succès et fin de fichier | | =-1= | erreur (met à jour =errno=) | * Todo list ** TODO étudier les différents man du sujet [2/10] - [X] access - [X] open, close, read, write - [ ] getcwd, chdir - [ ] stat, lstat, fstat - [ ] fork, execve - [ ] wait, waitpid, wait3, wait4 - [ ] signal, kill - [ ] exit - [ ] environ - [ ] builtin