Sono stato in grado di scrivere un programma in grado di leggere qualsiasi file di testo ... tranne quelli che si trovano in/proc. Qualsiasi file che provo a leggere da/proc si presenta vuoto.Qualche idea per cui il mio codice C non può leggere da/proc?
Ma ogni volta che si digita
cat /proc/cpuinfo
sul terminale, mi sono presentato con la mia informazioni della CPU.
Posso anche vedere il file quando lo apro con un editor di testo, come gedit o leafpad.
Quindi sembra che i file proc siano effettivamente file di testo, ma il mio programma C ha difficoltà a leggerli.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
char* readFileString(char* loc) {
char *fileDat;
FILE * pFile;
long lsize;
pFile = fopen(loc, "r");
// Grab the file size.
fseek(pFile, 0L, SEEK_END);
lsize = ftell(pFile);
fseek(pFile, 0L, SEEK_SET);
fileDat = calloc(lsize + 1, sizeof(char));
fread(fileDat, 1, lsize, pFile);
return fileDat;
}
int main(void) {
char *cpuInfo;
cpuInfo = readFileString("/proc/cpuinfo");
printf("%s\n", cpuInfo);
return 0;
}
Qualche idea, perché?
Un altro utente errante ha morso non utilizzando il ciclo di lettura file corretto. –
L'utente non è stato masterizzato da un ciclo di lettura dei file errato, ma non ha verificato la presenza di errori. –
Normalmente, se si desidera caricare l'intero file, è opportuno allocare innanzitutto la giusta quantità di memoria per evitare costosissimi realloc./proc è solo rotto in questo senso. Se i file in/proc non si comporteranno come normali file ma come pipe, dovrebbero apparire come fifos o altri tipi di file speciali rilevabili da stat, piuttosto che rompere la semantica dei file ordinari ... –