Systèmes
d'exploitation
Fonctions d'entrée et
sortie
Bibliographie pour aujourd'hui
• Modern Operating Systems
– Chapitre 6
• 6.1
• 6.2
• Operating Systems Concepts
– Chapitre 11
2
UNIX
3
Operations avec les fichiers
• création
• ouverture
• lecture
• écriture
• positionnement dans le fichier
• tronquer
• fermeture
• suppression
4
Creation
• shell
touch /path/to/file
toute commande qui écrit dans un fichier le crée
• ISO/ANSI C
FILE *f = fopen ("/path/to/file", "rw");
• POSIX
int fd = open ("/path/to/file", O_CREAT | O_EXCL, 0644);
• Windows
HANDLE fileHandle = CreateFile ("/path/to/file", ...,
CREATE_NEW);
5
Ouverture
• ISO/ANSI C
FILE *f = fopen("/path/to/file", "rt");
• POSIX
int fd = open("/path/to/file", O_RDONLY);
• Windows
HANDLE f = CreateFile("/path/to/file", ...,
OPEN_EXISTING);
6
Descripteur de fichier
• plus de descripteur peut correspondre aux même fichier
• chaque processus a une table de descripteurs de fichiers
• POSIX
– un entier identifiant une instance de fichier ouvert dans un
processus
– descripteurs spéciaux
• 0 (stdin), 1 (stdout), 2 (stderr)
• ISC C
– File
• Windows
– HANDLE
7
Table de descripteur de fichier
8
Lecture
• stocker des informations dans un tampon
• avance du curseur de fichier
• ISO C
// reads size * times bytes
n_items = fread(buffer, size, items, f);
• Unix
// reads maximum size bytes
// use only within a loop
n_read = read(fd, buffer, size);
• Windows
ReadFile(fHandle, buffer, bytesToRead,
&bytesRead, NULL);
9
Ecriture
• écrire des informations à partir d'un tampon
• avance du curseur de fichier
• ISO C
// writes size * times bytes
n_items = fwrite(buffer, size, items, f);
• Unix
// writes maximum size bytes
// use only within a loop
n_write = write(fd, buffer, size);
• Windows
WriteFile(fHandle, buffer, bytesToWrite,
&bytesWritten, NULL);
10
Curseur de fichier
• changements à lire et à écrire
• initialisation à l'ouverture
• mouvement de curseur de fichier
• ISO C
fseek(f, offset, SEEK_SET);
• Unix
lseek(fd, offset, SEEK_SET);
• Windows
SetFilePointer(fHandle, distanceToMove,
NULL, FILE_BEGIN);
11
Espace
utilisateur
Espace noyau
Fichier sur le discinstance de fichier ouvert
struct file
Pointeur
fichier
utilisateur
droits
inode
struct
inode
droits
taille
bloc
pointeurs
uid
gid
Fichier ouverte
descripteur
Types des donnees
12
Duplication de descripteur
• dupliquer un descripteur dans un autre descripteur
• les deux descripteurs fonctionnent sur le même fichier
• POSIX
newfd = dup(oldfd);
dup2(oldfd, newfd);
• Windows
DuplicateHandle(...);
SetStdHandle(...);
13
Tronquer
• supprimer le contenu du fichier
• le curseur de fichier est mis à size
• un fichier peut être ouvert et tronqué
// size is 0
open("/path/to/file", O_RDWR | O_TRUNC);
• un fichier peut être ouvert et tronqué
truncate("/path/to/file", size);
• un fichier peut être tronqué après ouverture
ftruncate(fd, size);
SetEndOfFile(hFile); // Windows
14
Fermer
• l'entrée de la table de descripteur est supprimée
• ISO C
fclose (f);
• POSIX
close(fd);
• Windows
CloseHandle(fHandle);
15
Supprimer
• supprimer le fichier du système de fichiers
• shell
rm file.txt
• ISO/C
remove("file.txt");
• POSIX
unlink("file.txt");
• Windows
DeleteFile("file.txt");
16
Redirection
• shell
echo “message” > file_out.txt
grep “word” < file_in.txt
• POSIX
fd = open ("file_out");
close (1);
dup2 (fd, 1);
close (fd);
17
NULL
stdout stdout
file.txt
stdout
file.txt
stdoutNULL
file.txt
stdout
NULL
file.txt
open(“file.txt”) close(1); dup2(fd, 1) close(fd)
Redirection
18
UNIX
19
UNIX
• Sur bits:
– r w - r- - r - - corresponde a 110100100
– r w x r- x - - - corresponde a 111101000
– r w - rw- - - - corresponde a 110110000
• Octal:
– r w - r- - r - - corresponde a 644
– r w x r- x - - - corresponde a 750
– r w - rw- - - - corresponde a 660
20
Gestion de permissions
• UNIX:
– Entités: User, Group, Others
– Types: Read, Write, Execute
// mode in octal
chmod("/path/to/file", 0644);
• Windows: Listes d’acces
– ACL: access control lists
– Types: lecture, écriture, listage, croisement, création de sous-fichiers,
etc.
– Permissions seulement sur NTFS, pas sur FAT32
SetNamedSecurityInfo(...);
21
Questions
22

SdE TP 3 - Fonctions d'entrée et sortie

  • 1.
  • 2.
    Bibliographie pour aujourd'hui •Modern Operating Systems – Chapitre 6 • 6.1 • 6.2 • Operating Systems Concepts – Chapitre 11 2
  • 3.
  • 4.
    Operations avec lesfichiers • création • ouverture • lecture • écriture • positionnement dans le fichier • tronquer • fermeture • suppression 4
  • 5.
    Creation • shell touch /path/to/file toutecommande qui écrit dans un fichier le crée • ISO/ANSI C FILE *f = fopen ("/path/to/file", "rw"); • POSIX int fd = open ("/path/to/file", O_CREAT | O_EXCL, 0644); • Windows HANDLE fileHandle = CreateFile ("/path/to/file", ..., CREATE_NEW); 5
  • 6.
    Ouverture • ISO/ANSI C FILE*f = fopen("/path/to/file", "rt"); • POSIX int fd = open("/path/to/file", O_RDONLY); • Windows HANDLE f = CreateFile("/path/to/file", ..., OPEN_EXISTING); 6
  • 7.
    Descripteur de fichier •plus de descripteur peut correspondre aux même fichier • chaque processus a une table de descripteurs de fichiers • POSIX – un entier identifiant une instance de fichier ouvert dans un processus – descripteurs spéciaux • 0 (stdin), 1 (stdout), 2 (stderr) • ISC C – File • Windows – HANDLE 7
  • 8.
  • 9.
    Lecture • stocker desinformations dans un tampon • avance du curseur de fichier • ISO C // reads size * times bytes n_items = fread(buffer, size, items, f); • Unix // reads maximum size bytes // use only within a loop n_read = read(fd, buffer, size); • Windows ReadFile(fHandle, buffer, bytesToRead, &bytesRead, NULL); 9
  • 10.
    Ecriture • écrire desinformations à partir d'un tampon • avance du curseur de fichier • ISO C // writes size * times bytes n_items = fwrite(buffer, size, items, f); • Unix // writes maximum size bytes // use only within a loop n_write = write(fd, buffer, size); • Windows WriteFile(fHandle, buffer, bytesToWrite, &bytesWritten, NULL); 10
  • 11.
    Curseur de fichier •changements à lire et à écrire • initialisation à l'ouverture • mouvement de curseur de fichier • ISO C fseek(f, offset, SEEK_SET); • Unix lseek(fd, offset, SEEK_SET); • Windows SetFilePointer(fHandle, distanceToMove, NULL, FILE_BEGIN); 11
  • 12.
    Espace utilisateur Espace noyau Fichier surle discinstance de fichier ouvert struct file Pointeur fichier utilisateur droits inode struct inode droits taille bloc pointeurs uid gid Fichier ouverte descripteur Types des donnees 12
  • 13.
    Duplication de descripteur •dupliquer un descripteur dans un autre descripteur • les deux descripteurs fonctionnent sur le même fichier • POSIX newfd = dup(oldfd); dup2(oldfd, newfd); • Windows DuplicateHandle(...); SetStdHandle(...); 13
  • 14.
    Tronquer • supprimer lecontenu du fichier • le curseur de fichier est mis à size • un fichier peut être ouvert et tronqué // size is 0 open("/path/to/file", O_RDWR | O_TRUNC); • un fichier peut être ouvert et tronqué truncate("/path/to/file", size); • un fichier peut être tronqué après ouverture ftruncate(fd, size); SetEndOfFile(hFile); // Windows 14
  • 15.
    Fermer • l'entrée dela table de descripteur est supprimée • ISO C fclose (f); • POSIX close(fd); • Windows CloseHandle(fHandle); 15
  • 16.
    Supprimer • supprimer lefichier du système de fichiers • shell rm file.txt • ISO/C remove("file.txt"); • POSIX unlink("file.txt"); • Windows DeleteFile("file.txt"); 16
  • 17.
    Redirection • shell echo “message”> file_out.txt grep “word” < file_in.txt • POSIX fd = open ("file_out"); close (1); dup2 (fd, 1); close (fd); 17
  • 18.
  • 19.
  • 20.
    UNIX • Sur bits: –r w - r- - r - - corresponde a 110100100 – r w x r- x - - - corresponde a 111101000 – r w - rw- - - - corresponde a 110110000 • Octal: – r w - r- - r - - corresponde a 644 – r w x r- x - - - corresponde a 750 – r w - rw- - - - corresponde a 660 20
  • 21.
    Gestion de permissions •UNIX: – Entités: User, Group, Others – Types: Read, Write, Execute // mode in octal chmod("/path/to/file", 0644); • Windows: Listes d’acces – ACL: access control lists – Types: lecture, écriture, listage, croisement, création de sous-fichiers, etc. – Permissions seulement sur NTFS, pas sur FAT32 SetNamedSecurityInfo(...); 21
  • 22.

Notes de l'éditeur

  • #13 [8] - inode - http://elf.cs.pub.ro/so2/wiki/laboratoare/lab09