Il sistema considera i dati di ingresso o di uscita come flusso di byte. Ci sono tre flussi di file standard -

Standard input (stdin),
Uscita standard (stdout), e
Errore standard (stderr).
Descrittore di file
Un descrittore di file è un intero a 16 bit assegnato a un file come un file di ID. Quando viene creato un nuovo file o un file esistente viene aperto, il descrittore di file viene utilizzato per l'accesso al file.

File descriptor dei flussi di file standard - stdin, stdout e stderr sono 0, 1 e 2, rispettivamente.

File Pointer
Un puntatore a file specifica la posizione per una successiva operazione di lettura / scrittura del file in termini di byte. Ciascun file è considerato come una sequenza di byte. Ogni file aperto è associato un puntatore a file che specifica un offset in byte, relativo all'inizio del file. Quando un file viene aperto, il puntatore del file è impostato su zero.

Gestione file Chiamate di sistema
La seguente tabella descrive brevemente le chiamate di sistema legate alla gestione dei file -

% eax Nome % ebx % ecx % edx
2 sys_fork pt_regs struct - -
3 sys_read unsigned int char * size_t
4 sys_write unsigned int const char * size_t
5 sys_open const char * int int
6 sys_close unsigned int - -
8 sys_creat const char * int -
19 sys_lseek unsigned int off_t unsigned int
I passi necessari per l'utilizzo delle chiamate di sistema sono gli stessi, come abbiamo discusso in precedenza -

Mettere il numero di chiamata di sistema nel registro EAX.
Conservare gli argomenti alla chiamata di sistema in registri EBX, ECX, etc.
Chiamare l'interrupt corrispondente (80h).
Il risultato è di solito restituito nel registro EAX.
Creazione e apertura di un file
Per la creazione e l'apertura di un file, effettuare le seguenti operazioni -

Mettere il sys_creat chiamata di sistema () numero 8, nel registro EAX.
Mettere il nome del file nel registro EBX.
Mettete i permessi dei file nel registro ECX.
La chiamata di sistema restituisce il descrittore di file del file creato nel registro EAX, in caso di errore, il codice di errore è nel registro EAX.

Apertura di un file esistente
Per aprire un file esistente, eseguire le seguenti attività -

Mettere il sys_open chiamata di sistema () numero 5, nel registro EAX.
Mettere il nome del file nel registro EBX.
Mettere la modalità di accesso ai file nel registro ECX.
Mettete i permessi dei file nel registro EDX.
La chiamata di sistema restituisce il descrittore di file del file creato nel registro EAX, in caso di errore, il codice di errore è nel registro EAX.

Tra le modalità di accesso ai file, più comunemente utilizzati sono: sola lettura (0), di sola scrittura (1), e lettura-scrittura (2).

La lettura da un file
Per la lettura da un file, effettuare le seguenti operazioni -

Mettere il sys_read chiamata di sistema () il numero 3, nel registro EAX.

Mettere il descrittore di file nel registro EBX.

Mettete il puntatore al buffer di ingresso nel registro ECX.

Mettere la dimensione di buffer, cioè, il numero di byte da leggere, nel registro EDX.

La chiamata di sistema restituisce il numero di byte letti nel registro EAX, in caso di errore, il codice di errore è nel registro EAX.

La scrittura su un file
Per la scrittura su un file, effettuare le seguenti operazioni -

Mettere il sys_write chiamata di sistema () il numero 4, nel registro EAX.

Mettere il descrittore di file nel registro EBX.

Mettete il puntatore al buffer di uscita nel registro ECX.

Mettere la dimensione di buffer, cioè, il numero di byte da scrivere, nel registro EDX.

La chiamata di sistema restituisce il numero effettivo di byte scritti nel registro EAX, in caso di errore, il codice di errore è nel registro EAX.

Chiusura di un file
Per la chiusura di un file, effettuare le seguenti operazioni -

Mettere il sys_close chiamata di sistema () numero 6, nel registro EAX.
Mettere il descrittore di file nel registro EBX.
I rendimenti chiamata di sistema, in caso di errore, il codice di errore nel registro EAX.

Aggiornamento di un file
Per l'aggiornamento di un file, effettuare le seguenti operazioni -

Mettere il sys_lseek chiamata di sistema () il numero 19, nel registro EAX.
Mettere il descrittore di file nel registro EBX.
Mettere il valore di offset nel registro ECX.
Mettere la posizione di riferimento per l'offset nel registro EDX.
La posizione di riferimento può essere:

All'inizio del file - il valore 0
Posizione attuale - il valore 1
Fine del file - il valore 2
I rendimenti chiamata di sistema, in caso di errore, il codice di errore nel registro EAX.

Esempio
Il seguente programma crea e apre un file denominato myfile.txt, e scrive un testo 'Benvenuti al Tutorial Point' in questo file. Successivamente, il programma legge dal file e memorizza i dati in un buffer di nome informazioni. Infine, visualizza il testo memorizzato in informazioni.

section .text
global _start ;must be declared for using gcc

_start: ;tell linker entry point
;create the file
mov eax, 8
mov ebx, file_name
mov ecx, 0777 ;read, write and execute by all
int 0x80 ;call kernel

mov [fd_out], eax

; write into the file
mov edx,len ;number of bytes
mov ecx, msg ;message to write
mov ebx, [fd_out] ;file descriptor
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel

; close the file
mov eax, 6
mov ebx, [fd_out]

; write the message indicating end of file write
mov eax, 4
mov ebx, 1
mov ecx, msg_done
mov edx, len_done
int 0x80

;open the file for reading
mov eax, 5
mov ebx, file_name
mov ecx, 0 ;for read only access
mov edx, 0777 ;read, write and execute by all
int 0x80

mov [fd_in], eax

;read from file
mov eax, 3
mov ebx, [fd_in]
mov ecx, info
mov edx, 26
int 0x80

; close the file
mov eax, 6
mov ebx, [fd_in]

; print the info
mov eax, 4
mov ebx, 1
mov ecx, info
mov edx, 26
int 0x80

mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel

section .data
file_name db 'myfile.txt'
msg db 'Welcome to Tutorials Point'
len equ $-msg

msg_done db 'Written to file', 0xa
len_done equ $-msg_done

section .bss
fd_out resb 1
fd_in resb 1
info resb 26
Quando il codice di cui sopra è compilato ed eseguito, esso produce il seguente risultato -

Written to file
Welcome to Tutorials Point