informatica:sol:laboratorio20:esercitazionib:readnwriten
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente | ||
| informatica:sol:laboratorio20:esercitazionib:readnwriten [03/05/2020 alle 07:45 (6 anni fa)] – Massimo Torquati | informatica:sol:laboratorio20:esercitazionib:readnwriten [03/05/2020 alle 10:44 (6 anni fa)] (versione attuale) – Massimo Torquati | ||
|---|---|---|---|
| Linea 1: | Linea 1: | ||
| ===== Implementazione delle funzioni " | ===== Implementazione delle funzioni " | ||
| - | (tratto da " | + | (tratto da " |
| Linea 24: | Linea 24: | ||
| handle a return value that’s possibly less than requested. These two functions simply | handle a return value that’s possibly less than requested. These two functions simply | ||
| call read or write as many times as required to read or write the entire N bytes of | call read or write as many times as required to read or write the entire N bytes of | ||
| - | data. | + | data.\\ |
| + | We call writen whenever we’re writing to one of the file types that we mentioned, | ||
| + | but we call readn only when we know ahead of time that we will be receiving a certain | ||
| + | number of bytes. Figure 14.24 shows implementations of readn and writen that we | ||
| + | will use in later examples. | ||
| + | Note that if we encounter an error and have previously read or written any data, we | ||
| + | return the amount of data transferred instead of the error. Similarly, if we reach the end | ||
| + | of file while reading, we return the number of bytes copied to the caller’s buffer if we | ||
| + | already read some data successfully and have not yet satisfied the amount requested. | ||
| <code c> | <code c> | ||
| ssize_t | ssize_t | ||
| - | writen(int fd, void *ptr, size_t n) | + | readn(int fd, void *ptr, size_t n) { |
| - | { | + | |
| | | ||
| | | ||
| Linea 35: | Linea 42: | ||
| nleft = n; | nleft = n; | ||
| while (nleft > 0) { | while (nleft > 0) { | ||
| - | + | | |
| - | + | if (nleft == n) return -1; /* error, return -1 */ | |
| + | else break; /* error, return amount read so far */ | ||
| + | } else if (nread == 0) break; /* EOF */ | ||
| + | nleft -= nread; | ||
| + | | ||
| } | } | ||
| | | ||
| Linea 42: | Linea 53: | ||
| ssize_t | ssize_t | ||
| - | readn(int fd, void *ptr, size_t n) | + | writen(int fd, void *ptr, size_t n) { |
| - | { | + | size_t |
| - | + | | |
| + | |||
| + | nleft = n; | ||
| + | while (nleft > 0) { | ||
| + | | ||
| + | if (nleft == n) return -1; /* error, return -1 */ | ||
| + | else break; /* error, return amount written so far */ | ||
| + | } else if (nwritten == 0) break; | ||
| + | nleft -= nwritten; | ||
| + | | ||
| + | } | ||
| + | | ||
| } | } | ||
| </ | </ | ||
informatica/sol/laboratorio20/esercitazionib/readnwriten.1588491950.txt.gz · Ultima modifica: 03/05/2020 alle 07:45 (6 anni fa) da Massimo Torquati
