La lecture en ligne est gratuite
Télécharger
Syst`emesdexploitation
Jena-S
Cours no. 11
Jean-S´ebastienCoron
´e
Universite´duLuxembourg
November 22, 2009
bastienCoronyStse`mesdepxloitation
naeJe´S-tsabdsepxoltitaoinienCoronSyst`eme
Ope´rationssurleschiers. Les commandes fwrite , fread Manipulation de processus. La commande fork()
ammanoitPrgorXNICsensUou
´e-SstbanCieonortsySeme`edsolpxeJna
Ouverturedunchier:cre´ationdunux: FILE *f; f=fopen("nom.ext","r"); en lecture. f=fopen("nom.ext","w"); ene´criture. Ecriture dans un fichier: fprintf(f,"bonjour"); ´ecrituredansunchier. Lecture dans un fichier: fscanf(f,"%d",&i); lecture d’un entier dans un fichier.
ointitaeLierssch
lapuniMaihreitnoedction
int fputc(char c,FILE *f) e´critlecaract`ere c dans le ficher f ,etincr´ementelaposition. int fgetc(FILE *f) lituncaract`ere,etincr´ementelaposition. Si fin du fichier, on obtient EOF . int feof(FILE *f) teste si on a atteint la fin du fichier (0 pour faux, non-nul pour vrai) int fclose(FILE *f) ferme le fichier
exploita`tmesedoCorSnsyasebentieaJS´n-
e()writndefcaLammo
La commande fwrite() : Permetdestockerdesdonne´esbinairesdansunchier. int fwrite(void *ptr, int size, int nbelem, FILE *f) Ecrit nbelem ´l´ementsdetaille size contenus dans le tableau e ptr . Lenombredoctets´ecritsest size*nbelem . Lafonctionrenvoielenombrede´le´mentsstocke´s. La commande fflush() fprintf et fwrite sontbue´rise´es. fflush() permet de vider le buffer.
nJe-Sanba´emesdexploitatiotseiCnronoyStse`
lempxeEme`tdselpxeatioonti
/* exemple avec fwrite */ #include <stdio.h>
int main () { FILE *f; char buf[] = "Hello world"; f = fopen ("monfich.txt" , "w"); int n=sizeof(buf); // 12 fwrite (buf , 1 , n , f); fclose (f); return 0; }
Jae-n´SebastienCoronSys
La commande fread() : Permetdeliredesdonn´eesbinairesdansunchier. int fread(void *ptr,int size, int nbelem, FILE *f) Lit nbelem e´le´mentsdetaille size et les stocke dans le tableau ptr . Lafonctionrenvoielenombred´el´ementslus. Silanduchierestatteinte,lenombred´el´ementsluspeut eˆtreinf´erieur`a size*nbelem .
Jaebesa-n´SlpxedsenoitatioroCoentiemt`ysnS)(erdandefommaLac
lpexEme´S-nsabeaeJysnSemt`entiroCoioatitnosedxelp
int main () { FILE *f; char buf[256]; f = fopen ("monfich.txt" , "r"); int n=fread (buf , 1 , 256 , f); printf("%s\n",buf); printf("Nb de carac lus: %d\n",n); fclose (f); return 0; }
/* exemple avec fread */ #include <stdio.h>
sssuoreceLpsitatiolpxedseme
Cr´eationdunprocessus. Lorsqu’on entre une commande, le shell lance un processus pourlex´ecuter. Le shell attend la fin du processus, puis attend la commande suivante. Arborescence de processus. Chaque processus a un pe`re ,celuiquilalanc´e. Lenum´eroduprocessusdup`ereestlePPID. Unprocessuspe`repeutavoirplusieursprocessus fils Sous UNIX, un premier processus init estcre´´eavecunPID de1.Anc`etredetouslesprocessus.
onJean-S´ebsaitneoCorSnsy`t
roCoentiemt`ysnSaeJsabe´S-nsssudnpeorec´eCrioattaoiontidesplex
Duplication d’un processus. Seulefa¸condecre´erunprocessus`abasniveau. Appelsyste`me fork() Cr´eeunecopiecompleˆteduprocessus,lsdeceprocessus. Le fils change de programme en appelant exec() . La fonction exec() remplace le code et ses d ´ ar cel i onnees p u d’ lle ande. une nouve comm
Exmocenudnoituce´emand
Exe´cutiondunecommande: tar -zcvf file * Le shell se duplique avec fork() . On a alors deux processus shell identiques. Leshellpe`reattendlanduprocessuslsavec wait() . Leshelllsremplacesonex´ecutableparceluidelacommande tar avec exec() La commande tar sex´ecute.Lorsquellesetermine,le processus fils disparait. Leshellpe`reestr´eactiv´eetattendlacommandesuivante.
sdexploitationeiCnronoyStse`emanJestba´e-S