1.proc文件系统的概念
proc文件系统是一种在用户态检查内核状态的机制。
不仅可以获得系统状态,还可以修改。
2.proc文件系统的特点
每个文件都规定了严格的权限
是否可读?是否可写?
哪个用户可读?哪个用户可写?
可以由用户自己添加一个/proc目录下的文件
可以由任何程序读取
3.读文件的程序
#include<stdio.h>/* 这里是头文件,如果你不懂什么是头文件,写上总没有错的 */
main() /* 这里是程序的入口点 */
{
char buffer[100]; /* 定义一块100个字节大小的内存 */
FILE *fp; /* 定义文件指针,如果你不懂,照搬就可以了 */
fp = fopen("/etc/passwd","r");
/* 打开文件,fopen是C库函数,有两个参数,第一个是文件名 */
/* 第二个是打开方式,"r"表示读,"r+"表示写,"w"表示先清空文件再写 */
if(fp == NULL)
/* fp作为fopen的返回值,如果为NULL,则表示文件打开不成功,比如文件不存在 */
printf("File could not be opened\n");/* 如果不成功,应该告诉用户
else /* 如果文件打开成功了 */
{
while(1) /* 这里是一个死循环,因为1的含义永远是“真” */
{
if(fgets(buffer, 100, fp) == NULL)
/* 从文件里面读一行(不超过100个字节),保存在buffer里面 */
break;
/* 如果fgets的返回值为NULL,说明到达文件末尾,这时应该跳出循环 */
printf("%s",buffer);/* 把buffer里面读到的内容显示出来 */
}
fclose(fp);/* 好了,所有任务完成了,关闭文件 */
}
return 0; /* 程序结束,退出 */
}
保存并编译这个程序:
gcc –o readfile readfile.c
运行这个程序。
./readfile
观察结果,这个程序读出了/etc/passwd文件的内容。
4.处理程序中的参数
怎样改编这个程序,让它能读任何用户指定的文件?
如readfile /proc/meminfo
或readfile /proc/cpuinfo
当我们编写一个程序readfile,但是用户以这样的方式去运行:
./readfile /proc/meminfo /proc/cpuinfo …
程序如何知道用户传入的参数?
main(int argc, char **argv)
argc:参数的个数(readfile算作第一个)
argv:字符串数组,argv[0]表示readfile程序的
名字,argv[1]表示第一个参数,依次类推
#include<stdio.h>
main(int argc,char **argv)
{
char buffer[100];
FILE *fp;
int i=1;
while(i<argc){
fp=fopen(argv[i],"r");
if(fp==NULL)
printf("File could not be opened\n");
else{
while(1){
if(fgets(buffer,100,fp)==NULL)
break;
printf("%s",buffer);
}
}
i=i+1;
fclose(fp);
}
return 0;
}