Linux 常用C函数说明-文件权限控制篇
chdir(改变当前的工作(目录)
相关函数
getcwd,chroot
表头文件
#include<unistd.h>
定义函数
int chdir(const char * path);
函数说明
chdir()用来将当前的工作目录改变成以参数path所指的目录。
返回值
执行成功则返回0,失败返回-1,errno为错误代码。
范例
#include<unistd.h>
main()
{
chdir(“/tmp”);
printf(“current working directory: %s\n”,getcwd(NULL,NULL));
}
执行
current working directory :/tmp
chmod(改变文件的权限)
相关函数
fchmod,stat,open,chown
表头文件
#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);
}
chown(改变文件的所有者)
相关函数
fchown,lchown,chmod
表头文件
#include<sys/types.h>
#include<unistd.h>
定义函数
int chown(const char * path, uid_t owner,gid_t group);
函数说明
chown ()会将参数path指定文件的所有者变更为参数owner代表的用户,而将该文件的组变更为参数group组。如果参数owner或group为-1, 对应的所有者或组不会有所改变。root与文件所有者皆可改变文件组,但所有者必须是参数group组的成员。当root用chown()改变文件所有者 或组时,该文件若具有S_ISUID或S_ISGID权限,则会清除此权限位,此外如果具有S_ISGID权限但不具S_IXGRP位,则该文件会被强制 锁定,文件模式会保留。
返回值
成功则返回0,失败返回-1,错误原因存于errno。
错误代码
参考chmod()。
范例
/* 将/etc/passwd 的所有者和组都设为root */
#include<sys/types.h>
#include<unistd.h>
main()
{
chown(“/etc/passwd”,0,0);
}
chroot(改变根目录)
相关函数
chdir
表头文件
#include<unistd.h>
定义函数
int chroot(const char * path);
函数说明
chroot()用来改变根目录为参数path 所指定的目录。只有超级用户才允许改变根目录,子进程将继承新的根目录。
返回值
调用成功则返回0,失败则返-1,错误代码存于errno。
错误代码
EPERM 权限不足,无法改变根目录。
EFAULT 参数path指针超出可存取内存空间。
ENAMETOOLONG 参数path太长。
ENOTDIR 路径中的目录存在但却非真正的目录。
EACCESS 存取目录时被拒绝
ENOMEM 核心内存不足。
ELOOP 参数path有过多符号连接问题。
EIO I/O 存取错误。
范例
/* 将根目录改为/tmp ,并将工作目录切换至/tmp */
#include<unistd.h>
main()
{
chroot(“/tmp”);
chdir(“/”);
}
closedir(关闭目录)
相关函数
opendir
表头文件
#include<sys/types.h>
#include<dirent.h>
定义函数
int closedir(DIR *dir);
函数说明
closedir()关闭参数dir所指的目录流。
返回值
关闭成功则返回0,失败返回-1,错误原因存于errno 中。
错误代码
EBADF 参数dir为无效的目录流
范例
参考readir()。
fchdir(改变当前的工作目录)
相关函数
getcwd,chroot
表头文件
#include<unistd.h>
定义函数
int fchdir(int fd);
函数说明
fchdir()用来将当前的工作目录改变成以参数fd 所指的文件描述词。
返回值执
行成功则返回0,失败返回-1,errno为错误代码。
附加说明
范例
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
main()
{
int fd;
fd = open(“/tmp”,O_RDONLY);
fchdir(fd);
printf(“current working directory : %s \n”,getcwd(NULL,NULL));
close(fd);
}
执行
current working directory : /tmp
fchmod(改变文件的权限)
相关函数
chmod,stat,open,chown
表头文件
#include<sys/types.h>
#include<sys/stat.h>
定义函数
int fchmod(int fildes,mode_t mode);
函数说明
fchmod()会依参数mode权限来更改参数fildes所指文件的权限。参数fildes为已打开文件的文件描述词。参数mode请参考chmod()。
返回值
权限改变成功则返回0,失败返回-1,错误原因存于errno。
错误原因
EBADF 参数fildes为无效的文件描述词。
EPERM 进程的有效用户识别码与欲修改权限的文件所有者不同,而且也不具root权限。
EROFS 欲写入权限的文件存在于只读文件系统内。
EIO I/O 存取错误。
范例
#include<sys/stat.h>
#include<fcntl.h>
main()
{
int fd;
fd = open (“/etc/passwd”,O_RDONLY);
fchmod(fd,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
close(fd);
}
fchown(改变文件的所有者)
相关函数
chown,lchown,chmod
表头文件
#include<sys/types.h>
#include<unistd.h>
定义函数
int fchown(int fd,uid_t owner,gid_t group);
函数说明
fchown ()会将参数fd指定文件的所有者变更为参数owner代表的用户,而将该文件的组变更为参数group组。如果参数owner或group为-1,对映 的所有者或组有所改变。参数fd 为已打开的文件描述词。当root用fchown()改变文件所有者或组时,该文件若具S_ISUID或S_ISGID权限,则会清除此权限位。
返回值
成功则返回0,失败则返回-1,错误原因存于errno。
错误代码
EBADF 参数fd文件描述词为无效的或该文件已关闭。
EPERM 进程的有效用户识别码与欲修改权限的文件所有者不同,而且也不具root权限,或是参数owner、group不正确。
EROFS 欲写入的文件存在于只读文件系统内。
ENOENT 指定的文件不存在
EIO I/O存取错误
范例
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
main()
{
int fd;
fd = open (“/etc/passwd”,O_RDONLY);
chown(fd,0,0);
close(fd);
}
fstat(由文件描述词取得文件状态)
相关函数
stat,lstat,chmod,chown,readlink,utime
表头文件
#include<sys/stat.h>
#include<unistd.h>
定义函数
int fstat(int fildes,struct stat *buf);
函数说明
fstat()用来将参数fildes所指的文件状态,复制到参数buf所指的结构中(struct stat)。Fstat()与stat()作用完全相同,不同处在于传入的参数为已打开的文件描述词。详细内容请参考stat()。
返回值
执行成功则返回0,失败返回-1,错误代码存于errno。
范例
#include<sys/stat.h>
#include<unistd.h>
#include<fcntk.h>
main()
{
struct stat buf;
int fd;
fd = open (“/etc/passwd”,O_RDONLY);
fstat(fd,&buf);
printf(“/etc/passwd file size +%d\n “,buf.st_size);
}
执行
/etc/passwd file size = 705
ftruncate(改变文件大小)
相关函数
open,truncate
表头文件
#include<unistd.h>
定义函数
int ftruncate(int fd,off_t length);
函数说明
ftruncate()会将参数fd指定的文件大小改为参数length指定的大小。参数fd为已打开的文件描述词,而且必须是以写入模式打开的文件。如果原来的文件大小比参数length大,则超过的部分会被删去。
返回值
执行成功则返回0,失败返回-1,错误原因存于errno。
错误代码
EBADF 参数fd文件描述词为无效的或该文件已关闭。
引自:http://www.diybl.com/course/6_system/linux/Linuxjs/2008831/139151.html
相关文章推荐
Linux部分精彩文章推荐
|
Linux 常用C函数说明-文件权限控制篇相关推荐
- linux添加目录命令权限,linux chmod命令设置目录/文件权限详解
首页 > Linux教程 > 常用命令 > chmod 文件权限 linux chmod命令设置目录/文件权限详解 linux中chmod命令用于改变系统文件或目录的访问权限,用数字 ...
- linux c数字转字符串函数,Linux常用C函数—字符串转换篇
Linux 常用C 函数-字符串转换篇 atof (将字符串转换成浮点型数) 相关函数 atoi ,atol ,strtod ,strtol ,strtoul 定义函数 double atof(con ...
- linux使用模板函数,Linux常用C函数
Linux常用C函数Tag内容描述: 1.Linux常用C函数 接口处理篇 accept(接受socket连线) 相关函数 socket,bind,listen,connect 表头文件 #inclu ...
- Linux 之用户管理与文件权限
Linux 之用户管理与文件权限 一. 1.查看系统版本 uname uname -a uname -r uname -m 2.特点 : ...
- linux 常用命令03--修改文件的权限与归属
chmod 命令 改变文件权限 第一种: chmod [u|g|o|a] [+|-] [r|w|x] filename 比如: chmod u+x filename 给所属用户增加执行的权限 第二种: ...
- linux常用c函数(中文版)
都是linux的c函数东西略多,用页面搜索来查找吧. << Back to man.ChinaUnix.net isalnum(测试字符是否为英文或数字) 相关函数 isalpha,isd ...
- linux下用chmod修改文件权限详解(文件权限与特殊权限)
chmod 是一条在Unix系统中用于控制用户对文件的权限的命令(change mode单词前缀的组合)和函数.只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权 ...
- Linux常用命令:用户、权限管理
目录 一.运行模式 二.用户管理(重点) 1.添加用户 2.修改用户 3.设置密码 4.删除用户 5.查看当前用户:whoami 6.查看登录用户:who 7.查看登录用户:w 8. 退出登录账户: ...
- linux特殊权限是e,linux下用chmod修改文件权限详解(文件权限与特殊权限)
chmod是一条在Unix系统中用于控制用户对文件的权限的命令(changemode单词前缀的组合)和函数.只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权限. ...
最新文章
- 给你一些点与线,只用动画就能看懂张量乘法,还能证明迹循环定理
- C#与Java的比较(转)
- 优秀的服务器托管服务商的必备要素
- ORB SLAM学习--跑自己数据集图片序列或摄像头或视频(转)
- OpenCASCADE可视化:应用交互服务之本地选择
- ionic安装插件常用命令
- MinIO Server config.json (v18) 指南
- SPSS问卷或量表调查研究需要多少份或要求多大的样本量?【SPSS 062期】
- 高校图书馆管理系统 php 漏洞,Libsys图书管理系统 V5.5 变量覆盖漏洞
- Windows下【AxureRP】原型设计工具破解码与安装包
- C#中调用PDFCreator生成PDF文件
- 车道线定位及拟合:直方图确定车道线位置
- 魔兽世界服务器TrinityCore源码学习
- 软件测试怎么测微信朋友圈,面试题:软件测试,如何测微信的朋友圈?
- echarts饼图 外圈转动动画 pie
- mysql 怎样解锁表_mysql一键解锁表
- 20162316刘诚昊 第二周博客作业
- 快速学习-视频点播解决方案
- 【3】python二级——操作题
- USB数据线上的“疙瘩”
热门文章
- 如何数分钟创建并成功运行数千台云主机?
- 写了 300000 行基础设施代码,我学到了这五条经验
- 如何避免腾讯云彻底搞丢“天价数据”事件再次发生?
- 北漂的程序员们,这寒冬你是否“有枝可依”?
- java+ext.ajax,[转载]Ext Ajax:怎么调用Ext.Ajax.request方法和使用Java Servlet进行处理
- php 类定义抽象方法吗,如何理解php的抽象类跟抽象方法
- Elasticsearch基础(五)搜索匹配
- java方法的重载 编程题,java面试编程题:重载方法
- dns文件传输服务器,MOOC云计算 - DNS三部曲之DNS区域传输限制
- oracle数据库字段的值加一_天天面试--数据库乐观锁和悲观锁