Differenze tra le versioni di "Fread ()"
Da Gambas-it.org - Wikipedia.
Riga 1: | Riga 1: | ||
La funzione della libreria di C | La funzione della libreria di C | ||
size_t fread(void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) | size_t fread(void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) | ||
− | legge da un flusso n blocchi (''__n'') di dati, aventi ciascuno una dimensione di ''__size'' byte, memorizzandoli nel buffer puntato da un Puntatore (''__ptr''). Ritorna il numero di byte letti dal flusso. | + | legge da un flusso n blocchi (''__n'') di dati, aventi ciascuno una dimensione di ''__size'' byte, memorizzandoli nel buffer puntato da un Puntatore (''__ptr''). <SUP>[ [[#Note|Nota 1]] ]</sup> |
+ | <BR>Ritorna il numero di byte letti dal flusso. | ||
Riga 60: | Riga 61: | ||
− | + | =Note= | |
− | == | + | [1] Possiamo intravvedere un'analogia di funzionamento fra le funzioni ''fread()'' e ''fwrite()'' ed i metodi ''.Read()'' e ''.write()'' dei vettori in Gambas== |
− | |||
Infatti analizzando il codice seguente: | Infatti analizzando il codice seguente: | ||
Riga 82: | Riga 82: | ||
'''End''' | '''End''' | ||
− | possiamo notare che: | + | possiamo infatti notare che: |
* il buffer di tipo ''Puntatore'', presente come primo parametro delle funzioni ''fread()'' e ''fwrite()'' di C, corrisponde alla variabile vettoriale "bb"; | * il buffer di tipo ''Puntatore'', presente come primo parametro delle funzioni ''fread()'' e ''fwrite()'' di C, corrisponde alla variabile vettoriale "bb"; | ||
* il secondo parametro delle due funzioni esterne di C, corrisponde al terzo parametro dei metodi ''.read()'' e ''.write()'' della variabile vettoriale "bb"; | * il secondo parametro delle due funzioni esterne di C, corrisponde al terzo parametro dei metodi ''.read()'' e ''.write()'' della variabile vettoriale "bb"; | ||
* il quarto parametro delle due funzioni esterne di C, corrisponde sostanzialmente al primo parametro dei due metodi della variabile vettoriale "bb"; | * il quarto parametro delle due funzioni esterne di C, corrisponde sostanzialmente al primo parametro dei due metodi della variabile vettoriale "bb"; |
Versione delle 07:32, 9 set 2016
La funzione della libreria di C
size_t fread(void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream)
legge da un flusso n blocchi (__n) di dati, aventi ciascuno una dimensione di __size byte, memorizzandoli nel buffer puntato da un Puntatore (__ptr). [ Nota 1 ]
Ritorna il numero di byte letti dal flusso.
Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché bisognerà dichiarare la libreria di C: libc.so.6, nella quale la funzione è contenuta:
Private Extern fread(__ptr As Pointer, __size As Long, __n As Long, __stream As Pointer) As Long In "libc:6"
Semplice esempio uso in Gambas in combinazione con le funzioni fwrite(), fseek() e fclose():
Library "libc:6" Private Enum SEEK_SET = 0, SEEK_CUR, SEEK_END Private Extern fopen(__filename As String, __modes As String) As Pointer Private Extern fwrite(__ptr As Pointer, __size As Long, __n As Long, __stream As Pointer) As Long Private Extern fseek(streamp As Pointer, offset As Long, whence As Integer) As Integer ' size_t fread(void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) ' Read chunks of generic data from STREAM. Private Extern fread(__ptr As Pointer, __size As Long, __n As Long, __stream As Pointer) As Long Private Extern fclose(__stream As Pointer) As Integer Public Sub Main() Dim p, pw, pr As Pointer Dim s As String Dim l As Long s = "Testo qualsiasi" l = len(s) pw = Alloc(s) pr = Alloc(SizeOf(gb.Byte) * i) p = fopen("/tmp/f", "w+") fwrite(pw, 1, l, p) fseek(p, 0, SEEK_SET) fread(pr, 1, l, p) Print String@(pr) fclose(p) ' Libera la memoria precedentemente allocata: Free(pw) Free(pr) End
Note
[1] Possiamo intravvedere un'analogia di funzionamento fra le funzioni fread() e fwrite() ed i metodi .Read() e .write() dei vettori in Gambas==
Infatti analizzando il codice seguente:
Public Sub Main() Dim bb As Byte[] Dim fl, ex As File fl = Open "/percorso/del/file/da/leggere" For Read ex = Open "/percorso/del/file/da/scrivere" For Create With bb = New Byte[](Lof(fl)) .Read(fl, 0, Lof(fl)) .Write(ex, 0, Lof(fl)) End With fl.Close ex.Close End
possiamo infatti notare che:
- il buffer di tipo Puntatore, presente come primo parametro delle funzioni fread() e fwrite() di C, corrisponde alla variabile vettoriale "bb";
- il secondo parametro delle due funzioni esterne di C, corrisponde al terzo parametro dei metodi .read() e .write() della variabile vettoriale "bb";
- il quarto parametro delle due funzioni esterne di C, corrisponde sostanzialmente al primo parametro dei due metodi della variabile vettoriale "bb";