我需要使用fopen()sys调用在/ proc /文件夹中打开一个没有扩展名的文件,遗憾的是它不起作用。
这是代码
#include <stdio.h>
#include <strings.h>
#include <errno.h>
int main(void){
FILE *f;
int size;
//open /proc/meminfo
f = fopen("/proc/meminfo", "r");
printf("errno after open: %s\n", strerror(errno)); //errno = Success
//create buffer
fseek(f,0,SEEK_END);
size = ftell(f);
printf("size: %d\n", size);
char buffer[size];
bzero(buffer,size);
fseek(f,0,SEEK_SET);
//fill the buffer and print
fread(buffer,sizeof(char),size,f);
printf("%s\n", buffer);
return 0;
}
问题是size = 0,errno是“Success”,因此,即使文件被打开,也不会读取文件。
你有什么想法吗?
提前致谢!
答案 0 :(得分:2)
/proc
中的一些(大多数?)文件的大小为0,因为它们的内容是在读取时动态生成的。因此,将EOF作为普通文件读取以获取内容。这有效:
#include <stdio.h>
int main(void){
FILE *f;
int c;
f = fopen("/proc/meminfo", "r");
if (!f) {
return -1;
}
while ( (c = fgetc(f)) != EOF) {
printf("%c",c);
}
return 0;
}
答案 1 :(得分:0)
文件的扩展名无关紧要。
您的代码中有几个问题:
1.您没有测试fopen
的返回值。从联机帮助页:
返回值
成功完成fopen()后,fdopen()和freopen()返回一个FILE 指针。否则,返回NULL并设置errno以指示错误。
您无法使用变量分配char数组。所以你必须改变:
char buffer[size];
通过:
#define BUFFER_SIZE 512
char buffer[BUFFER_SIZE];
或动态
char* buffer = malloc(sizeof(char) * size);
if (buffer == NULL)
return 1;
(当然你可以改进这个片段)。最后也不要忘记free
缓冲区。
BUFFER_SIZE
)并存储您需要的文件。希望这有帮助。