Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32...
-
Upload
martino-cossu -
Category
Documents
-
view
218 -
download
0
Transcript of Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32...
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
Il File System MS-DOS
• Rappresentazione di una directory in MS-DOS
• Attributi : file nascosto, file di sistema, ecc.
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).
Il File System di Windows 98 (FAT32)
La rappresentazione estesa di una directory MS-DOS utilizzata in Windows 98
Bytes
Il File System di Windows 98 (2)
La rappresentazione di (parte di) un nome di file “lungo” in Windows 98
Bytes
Checksum
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
Struttura del File System NTFS
La master file table di NTFS (1024 record da 1K)
Struttura del File System NTFS
Gli attributi usati nei record MFT
partizioni
Struttura del File System NTFS
Un record MFT per un file di 3 run e 9 blocchi
Struttura del File System NTFS
Un file che richiede 3 MFT record per memorizzare i suoi run
File System API in Windows 2000
• Principali chiamate della Win32 API relative ai file con il loro equivalente Unix più vicino
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 sicurezzacreazione, // creare il file o no se non esisteAttributi, // attributi vari (compressione, nascosto, ecc..)oldFile // handle di un file da cui copiare gli attributi (NULL
indica nessun file));
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”);
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);
}
System Call per la gestione dei file pos=SetFilePointer (handle, offset, offsetAlto, puntoPartenza);
puntoPartenza:FILE_BEGIN inizio fileFILE_CURRENT posizione correnteFILE_END fine filepos = posizione dall’inizio del file.Esempio:hfile=CreateFile(“topo”,…);pos=SetFilePointer(hfile, 12, NULL,FILE_BEGIN);/* si sposta nella posizione 12 del file topo */
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 l’accesso.
Scriviamo 5 interi su file e li leggiamoHANDLE 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);
Driver dei dispositivi di I/O
Un driver deve essere conforme al Windows Driver Model, cioè deve, fra l’altro:
•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
Gestione dell’I/O (es. di utilizzo di porta seriale)
#include <windows.h>
#include <stdio.h>
#include <conio.h>
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