- 1、本文档共112页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux环境高级编程-文件与目录、标准IO
你蚂绢凳澄卷队脆稚禾告昧披乔峦秦鬼曙烈彦琵暴娄壶陪钙赖年宫号瑰棕Linux环境高级编程-文件与目录、标准IOLinux环境高级编程-文件与目录、标准IO;文件和目录
文件类型
用户ID和组ID
文件访问权限
文件时间
文件长度
硬连接和符号连接
目录操作
标准IO
标准I/O库
打开流
定位流
读写流
格式化输出
临时文件
系统数据文件
口令文件
其他数据
系统标识
系统日期、时间
;文件类型
用户ID和组ID
文件访问权限
文件时间
文件长度
硬连接和符号连接
目录操作
;用于获取有关文件的信息结构
函数原型
int stat(const char* pathname, struct stat* buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char* pathname, struct stat* buf);
参数与返回值
参数pathname:文件名,需要获取该文件的信息
参数 filedes:文件描述符
参数buf:stat函数将pathname对应的文件信息,填入buf指向的stat结构中
返回值:0成功;-1出错
区别:
stat通过文件名返回文件的信息;fstat通过文件描述符
stat返回符号链接所引用的文件信息;lstat返回符号链接本身的信息
;;Linux系统中的常见文件类型有:
普通文件
目录文件
字符特殊文件 提供对设备不带缓冲的访问
块特殊文件 提供对设备带缓冲的访问
FIFO文件 用于进程间的通信,命名管道
套接口文件 用于网络通信
符号链接 使文件指向另一个文件;使用如下的宏,判断文件类型
普通文件 S_ISREG()
目录文件 S_ISDIR()
字符特殊文件 S_ISCHR()
块特殊文件 S_ISBLK()
FIFO文件 S_ISFIFO()
套接口文件 S_ISSOCK()
符号连接 S_ISLINK();示例代码:
struct stat buf;
lstat( filename, buf);
if (S_ISDIR(buf.st_mode))
cout “directory” endl;
注意,此处必须用lstat获取文件信息,而不用stat, 为什么?
;第一种ID:
Linux是一个多用户操作系统。每个用户都有一个ID,用以唯一标识该用户。这个ID被称为UID。
每个用户都属于某一个组,组也有一个ID。这个ID,被称为组ID,GID。
第二种ID:文件所有者相关
文件所有者ID:拥有某文件的用户的ID
文件所有者组ID:拥有某文件的用户所属组的ID
第三种ID:实际用户ID和实际组ID
进程的实际用户ID:运行该进程的用户的ID
进程的实际组ID:运行该进程的用户所属的组ID
第四种ID:有效用户ID和有效组ID
进程的有效用户ID:用于文件访问权限的检查
进程的有效组ID:用于文件访问权限的检查
大多数情况下有效用户/组ID=实际用户/组ID
第五种ID:保存设置用户ID 和保存的设置组ID
保存的设置用户ID
保存的设置组ID
上述两者在执行一个程序时包含了有效用户ID和有效组ID的副本
;用于更改文件的用户ID和组ID
函数原型
int chown(const char* pathname, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *pathname, uid_t owner, gid_t group);
参数与返回值
参数pathname:被改的文件名
参数owner:文件新的所有者ID
参数group:文件新的所有者所在组的ID
返回值:0成功;-1出错
lchown更改符号链接本身的所有者,而不是符号链接所指向的文件
;超级用户进程可以更改文件的用户ID
非超级用户进程拥有某文件,可以更改该文件用户ID
你可以修改你所拥有的文件的组ID,但只能改到你所属于的组
;Linux是一个多用户的操作系统,从安全或者隐私考虑,通常一个文件并不是所有用户都能够访问的。;;7;7;st_mode屏蔽;执行许可权表示可以搜索该目录(或进入该目录)。
读许可权允许读目录,获得该目录中所有文件名的列表;
用名字打开任一类型的文件时,对该名字中包含的每一个目录,包括它可能隐含的当前工作目录都应具有执行许可权。如:为了打开文件/usr/dict/words,需要具有对目录/,/usr,/usr/dict的执行许可权。;为了在open函数中对一个文件指定O_TRUNC标志,必须对该文件具有写许可权;
为了在一个目录
文档评论(0)