Tôi đã có thể viết một chương trình có thể đọc bất kỳ tệp văn bản nào ... ngoại trừ những tệp được tìm thấy trong/proc. Bất kỳ tập tin nào mà tôi cố đọc từ/proc đều trống.Bất kỳ ý tưởng nào Tại sao mã C của tôi không thể đọc từ/proc?
Nhưng bất cứ khi nào tôi gõ
cat /proc/cpuinfo
trên thiết bị đầu cuối, tôi đã trình bày với thông tin CPU của tôi.
Tôi cũng có thể xem tệp khi tôi mở tệp bằng trình chỉnh sửa văn bản, chẳng hạn như gedit hoặc leafpad.
Vì vậy, dường như tệp/proc thực sự là tệp văn bản, nhưng chương trình C của tôi đang gặp khó khăn khi đọc chúng.
#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;
}
Bất kỳ ý tưởng nào tại sao?
Một người dùng không thích khác bị cắn bởi không sử dụng đúng vòng lặp đọc tệp. –
Người dùng đã bị đốt cháy không phải bởi một vòng lặp đọc tệp không chính xác, nhưng bằng cách không kiểm tra lỗi. –
Thông thường nếu bạn muốn tải toàn bộ tệp, bạn nên phân bổ số lượng bộ nhớ phù hợp trước để tránh các tệp reallocs đắt tiền./proc chỉ bị phá vỡ theo nghĩa này. Nếu các tập tin trong/proc sẽ không hoạt động như các tập tin bình thường mà là các đường ống, chúng sẽ hiển thị như năm mươi hoặc một số loại tập tin đặc biệt khác có thể phát hiện được bằng stat, thay vì phá vỡ các ngữ nghĩa tập tin thông thường ... –