linux C I/O (文件操作1)
文件主要包含两个方面的内容:
1.文件本身所包含的数据
2.文件的属性(日期,权限,访问者,所有者。。。)
其中一个非常有用的数据结构在<sys/stat.h>中,这里包含了所有关于文件信息的东西
目录也是一种文件,叫目录文件。
linux下的一些目录:
/bin:存放一些普通用户可以执行的命令
/boot :内核以及启动的文件‘
/dev:设备文件
/etc : 配置文件
/home: 用户家目录,存放用户的文件
/lib : 各种库文件
/root : 超级用户
/sbin : 管理系统的命令
/tmp : 临时文件目录
/usr : 系统应用程序
/var : 日志文件
文件的分类为:
普通文件,目录文件,特殊字符文件,块特殊文件,FIFO,套结字,符号链接
访问权限:
读,写,执行, 4+2+1 = 7;
chmod 600 ××× (只有所有者有读和写的权限)
chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)
chmod 700 ××× (只有所有者有读和写以及执行的权限)
chmod 666 ××× (每个人都有读和写的权限)
chmod 777 ××× (每个人都有读和写以及执行的权限)
下面贴上chmod 的简单实现
:
#include<stdio.h>
#include<stdlib.h> //包含exit()返回函数
#include<sys/types.h> //包含chmod,fchmod函数
#include<sys/stat.h> //包含所有文件属性相关信息
int main(int argc,char **argv)
{
int mode; //记录权限值
int mode_u; //记录所有者权限
int mode_g; //记录组的权限
int mode_o; //记录其他人的权限
char *path; //记录文件路径
if(argc < 3){
printf("please enter ture number:");
exit(0);
}
mode = atoi(argv[1]); //将文件的个个权限分离,且在最后转换成八进制(系统可以接受的形式)
if(mode > 777 || mode < 0){
printf("please enter a ture power:");
exit(1);
}
mode_u = mode/100;
mode_g = (mode-(mode_u*100))/10;
mode_o = mode - (mode_u*100)-(mode_g*10);
mode = (mode_u*8*8)+(mode_g*8)+(mode_o*1);
path = argv[2];
if(-1 == chmod(path,mode)){ //判错操作,同时也执行了主要的功能
printf("the chmod is error\n");
exit(3);
}
return 0;
}