2013-02-24 4 views
-1

J'essayais de lire le fichier proc/stat mais je ne pouvais pas cependant je suis sûr que mon code fonctionne parce que j'ai essayé de lire d'autres fichiers et cela a fonctionné parfaitement .. voici la Code:Impossible de lire le fichier sous Linux

#include <stdio.h> 
#include <stdlib.h> // for the malloc 
int main (int argc,char *argv[]) 
{ 
char *file_name = "/proc/stat"; 
char *contents; 
FILE *file; 
int filesize = 0; 
file = fopen(file_name, "r"); 
if(file != NULL) 
{ 
    //get the file size 
    fseek(file, 0, SEEK_END); 
    filesize = ftell(file); 
    fseek(file, 0, SEEK_SET); 

    printf("the file size is: %d\n", filesize); 

    contents = (char *)malloc(filesize+1); // allocate memory 
    fread(contents, filesize,1,file); 
    contents[filesize]=0; 
    fclose(file); 
    printf("File has been read: %s \n", contents); 

} 
else 
{ 
    printf("the file name %s doesn't exits", file_name); 
} 






return 0; 

}

+0

Remplacer 'printf ("le nom du fichier% s ne pas sorties", nom_fichier);' avec 'perror (nom_fichier); ' –

+3

Si vous ne vérifiez pas les valeurs de retour de toutes les fonctions d'E/S que vous utilisez et réagissez en fonction d'elles, vous ne serez jamais en mesure de comprendre pourquoi votre code échoue. Faites-vous une faveur et ** toujours ** vérifiez tous. – Mat

+0

Ne pas lancer malloc. Si vous obtenez des erreurs lorsque vous supprimez la distribution de malloc dans ce code, c'est parce que vous utilisez un compilateur C++. Si vous voulez utiliser C++, utilisez C++ 'new'. Sinon, utilisez un compilateur C. Il est impossible de vous restreindre à un sous-ensemble commun des deux langues; Il y a des caractéristiques de C que C++ n'a pas adoptées dans les 10 dernières années utilisées dans les bibliothèques C communes d'aujourd'hui. Vous ne pouvez pas les compiler avec un compilateur C++. Allez-vous perdre des heures de votre temps à convertir ce code en un code compatible C++ légèrement moins lisible pour compiler en C++? Utilisez simplement un compilateur C. – Sebivor

Répondre

2

vous ne pouvez pas déterminer la taille des fichiers spéciaux dans/proc et vous ne pouvez pas chercher à la fin en eux. Leurs contenus sont générés à la volée. Avec ces fichiers, vous devez continuer à lire jusqu'à ce que vous rencontriez un EOF. Vous ne pouvez pas savoir combien de données vous obtiendrez à l'avance. Donc, continuez à lire les données dans, disons, des blocs de 512 octets, jusqu'à ce que vous obteniez une lecture courte. Ensuite, vous saurez que vous ne pouvez plus lire les données.

Edit: juste pour moi que j'ai répondu à une question passé déjà: /proc/[pid]/cmdline file size

Questions connexes