标准IO下对文件权限的修改

修改文件权限

1.int chmod(const char * path, mode_t mode);

函数说明:chmod()会依参数mode 权限来更改参数path 指定文件的权限。

参数 mode 有下列数种组合:

1、S_IFMT 0170000 文件类型的位遮罩
2、S_IFSOCK 0140000 scoket
3、S_IFLNK 0120000 符号连接
4、S_IFREG 0100000 一般文件
5、S_IFBLK 0060000 区块装置
6、S_IFDIR 0040000 目录
7、S_IFCHR 0020000 字符装置
8、S_IFIFO 0010000 先进先出
9、S_ISUID 04000 文件的 (set user-id on execution)位
10、S_ISGID 02000 文件的 (set group-id on execution)位
11、S_ISVTX 01000 文件的sticky 位 表示在此目录下的文件只能被该文件所有者、此目录所有者或root 来删除或改名.
12、S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限
13、S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限
14、S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限
15、S_IRGRP 00040 用户组具可读取权限
16、S_IWGRP 00020 用户组具可写入权限
17、S_IXGRP 00010 用户组具可执行权限
18、S_IROTH 00004 其他用户具可读取权限
19、S_IWOTH 00002 其他用户具可写入权限
20、S_IXOTH 00001 其他用户具可执行权限上述的文件类型在 POSIX 中定义了检查这些类型的宏定义
21、S_ISLNK(st_mode) 判断是否为符号连接文件
22、S_ISREG(st_mode) 是否为普通文件
23、S_ISDIR(st_mode) 是否为目录文件
24、S_ISCHR(st_mode) 是否为字符装置文件
25、S_ISBLK(st_mode) 是否为块设备文件
26、S_ISSOCK(st_mode) 是否为套接字socket文件

chmod("/test/a.text",0777);
注:只有该文件的所有者或有效用户识别码为0,才可以修改该文件权限。

2.int fchmod(int fd, mode_t mode);

函数说明:修改fd文件描述符的文件权限

mode_t同上

在已经打开某一文件的时候使用该函数比较方便,但是当使用fopen打开一个FILE *fp文件时就fileno需要转换后才可以使用

	//标准IO修改文件权限
	FILE* fp = fopen("/test/text.txt","r+");
	int fd = fileno(fp);
	fchmod(fd, 0664);
	fclose(fp);
	
	//文件IO修改文件权限
	int fd;
	fd = open("/etc/passwd", O_RDONLY);
	fchmod(fd, 0664);
	close(fd);

文件流转文件描述符

int fileno(FILE *stream);

函数说明:用来取得参数stream指定的文件流所使用的文件描述符

常用于修改权限,chmod fcntl dup 等操作函数

文件描述符转文件流

FILE * fdopen(int fildes, const char * mode);

函数说明:fdopen()会将参数fildes 的文件描述词, 转换为对应的文件流指针后返回.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值