fd = open("/home/testfile", O_CREAT|O_RDWR|O_TRUNC);

linux下,用形如这样的语句创建或打开文件时,如何去控制文件的权限(ls-l显示的权限)呢?我打开文件时的参数O_RDWR是否受这个权限所限制?比如testfile的权... linux下,用形如这样的语句创建或打开文件时,如何去控制文件的权限(ls -l显示的权限)呢?我打开文件时的参数O_RDWR是否受这个权限所限制?比如testfile的权限是-r--r--r--,我用O_RDWR参数后,能否往文件写入? 展开
 我来答
cdkrr
推荐于2016-12-01 · TA获得超过354个赞
知道小有建树答主
回答量:355
采纳率:0%
帮助的人:343万
展开全部
控制文件权限用chmod函数。如果testfile的权限是r--r--r--那么很显然你不能往里面写内容。

关于chmod函数的介绍如下,请参考:
chmod(改变文件的权限)
表头文件
#include<sys/types.h>
#include<sys/stat.h>

定义函数 int chmod(const char * path,mode_t mode);

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

参数 mode 有下列数种组合
S_ISUID 04000 文件的(set user-id on execution)位
S_ISGID 02000 文件的(set group-id on execution)位
S_ISVTX 01000 文件的sticky位
S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限
S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限
S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限
S_IRGRP 00040 用户组具可读取权限
S_IWGRP 00020 用户组具可写入权限
S_IXGRP 00010 用户组具可执行权限
S_IROTH 00004 其他用户具可读取权限
S_IWOTH 00002 其他用户具可写入权限
S_IXOTH 00001 其他用户具可执行权限
只有该文件的所有者或有效用户识别码为0,才可以修改该文件权限。基于系统安全,如果欲将数据写入一执行文件,而该执行文件具有S_ISUID 或S_ISGID 权限,则这两个位会被清除。如果一目录具有S_ISUID 位权限,表示在此目录下只有该文件的所有者或root可以删除该文件。

返回值 权限改变成功返回0,失败返回-1,错误原因存于errno。

错误代码 EPERM 进程的有效用户识别码与欲修改权限的文件拥有者不同,而且也不具root权限
EACCESS 参数path所指定的文件无法存取。
EROFS 欲写入权限的文件存在于只读文件系统内。
EFAULT 参数path指针超出可存取内存空间。
EINVAL 参数mode不正确
ENAMETOOLONG 参数path太长
ENOENT 指定的文件不存在
ENOTDIR 参数path路径并非一目录
ENOMEM 核心内存不足
ELOOP 参数path有过多符号连接问题。
EIO I/O 存取错误

范例 /* 将/etc/passwd 文件权限设成S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH */
#include<sys/types.h>
#include<sys/stat.h>
main()
{
chmod(“/etc/passwd”,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式