Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoMartino Cossu Modificato 10 anni fa
1
Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi di I/O
2
Il File System MS-DOS Rappresentazione di una directory in MS-DOS Attributi : file nascosto, file di sistema, ecc.
3
Il File System DOS in Windows 95/98 massima ampiezza delle partizioni per diverse ampiezze dei blocchi FAT32 utilizza in realtà 28 bit e permette una minore frammentazione Si ha una File Allocation Table mantenuta in memoria (solo in parte per FAT32).
4
Il File System di Windows 98 (FAT32) La rappresentazione estesa di una directory MS-DOS utilizzata in Windows 98 Bytes
5
Il File System di Windows 98 (2) La rappresentazione di (parte di) un nome di file lungo in Windows 98 Bytes Checksum
6
NTFS (Windows NT/2000) Indirizzi a 64 bit Nomi dei file in codifica Unicode Case-sensitive Stream multipli e attibuti associati ad un file I blocchi vanno da 512 bytes a 64K (standard 4 Kb) Supporta compressione e crittografia dei file
7
Struttura del File System NTFS La master file table di NTFS (1024 record da 1K)
8
Struttura del File System NTFS Gli attributi usati nei record MFT partizioni
9
Struttura del File System NTFS Un record MFT per un file di 3 run e 9 blocchi
10
Struttura del File System NTFS Un file che richiede 3 MFT record per memorizzare i suoi run
11
File System API in Windows 2000 Principali chiamate della Win32 API relative ai file con il loro equivalente Unix più vicino
12
Creazione di un File CreateFile ( nome, // nome del file accesso, // modo accesso (lettura, scrittura o entrambi) condivisione, // condivisione del file (0 nessuna condivisione) security, // attributi di sicurezza creazione, // creare il file o no se non esiste Attributi, // attributi vari (compressione, nascosto, ecc..) oldFile // handle di un file da cui copiare gli attributi (NULL indica nessun file) );
13
System Call per la gestione dei file accesso: GENERIC_READ GENERIC_WRITE condivis.: FILE_SHARE_READ FILE_SHARE_WRITE 0 creazione: CREATE_NEW CREATE_ALWAYS OPEN_EXISTING OPEN_ALWAYS INVALID_HANDLE_VALUE indica fallimento nella create Esempio: Handle hfile; hfile = CreateFile (pippo, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); If (hfile==INVALID_HANDLE_VALUE) printf (errore nella creazione file \n);
14
System Call per la gestione dei file S= WriteFile (handle, buffer, lung, &bytescritti,NULL); S= ReadFile (handle, buffer, lung, &byteletti,NULL); S vale 1 in caso di successo Esempio: { HANDLE hfile; DWORD bytescritti; int s; char buffer[]=buonasera; hfile = CreateFile (pippo, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); s = WriteFile (hfile, buffer, 9,&bytescritti,NULL); CloseHandle (hfile); }
15
System Call per la gestione dei file pos=SetFilePointer (handle, offset, offsetAlto, puntoPartenza); puntoPartenza: FILE_BEGIN inizio file FILE_CURRENT posizione corrente FILE_END fine file pos = posizione dallinizio del file. Esempio: hfile=CreateFile(topo,…); pos=SetFilePointer(hfile, 12, NULL,FILE_BEGIN); /* si sposta nella posizione 12 del file topo */
16
System Call per la gestione dei file s=LockFile (handle, offset, offsetAlto, lung, lungAlto); s=UnLockFile (handle, offset, offsetAlto, lung, lungAlto); Lock non permette a nessun altro processo di accedere alla porzione di file a partire dalla posizione offset fino alla posizione offset+lung. Unlock rilascia laccesso.
17
Scriviamo 5 interi su file e li leggiamo HANDLE hfile; DWORD bytescritti,byteletti; int s,i; int buffer[]={5,7,12,8,9}; int bufferLett[5]; hfile = CreateFile ("pippo", GENERIC_WRITE|GENERIC_READ, 0, NULL, CREATE_ALWAYS, 0, NULL); s = WriteFile (hfile, buffer, 5*sizeof(int),&bytescritti,NULL); SetFilePointer(hfile,0,NULL,FILE_BEGIN); s = ReadFile (hfile, bufferLett, 5*sizeof(int),&byteletti,NULL); for (i=0;i<5;i++) printf ("%d\n",bufferLett[i]); CloseHandle (hfile);
18
Driver dei dispositivi di I/O Un driver deve essere conforme al Windows Driver Model, cioè deve, fra laltro: Gestire le richieste di I/O standard (I/O Request Packet) Essere basato su oggetti Essere rientrante nel caso di sistemi multiprocessore Essere compatibile fra Windows 98 e 2000
19
Gestione dellI/O (es. di utilizzo di porta seriale) #include int main() { HANDLE handle; char buffer[40] = …………….."; DWORD bytescritti; handle = CreateFile("COM1", GENERIC_READ, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); SetCommState(….); // setta alcuni parametri della porta SetCommTimeouts (…); / setta i timeout della porta WriteFile(handle, buffer, 40, &bytescritti, 0); CloseHandle (handle); }// fine main
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.