4. Operations avec les fichiers
• création
• ouverture
• lecture
• écriture
• positionnement dans le fichier
• tronquer
• fermeture
• suppression
4
5. 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
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
9. 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
10. 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
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 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
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 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
15. Fermer
• l'entrée de la table de descripteur est supprimée
• ISO C
fclose (f);
• POSIX
close(fd);
• Windows
CloseHandle(fHandle);
15
16. 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
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
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