Linux系统编程-文件操作.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux系统编程-文件操作

最基本的访问文件方法是:使用read()和write()系统调用。在一个文件能被访问之前,必须通过open() 或者creat()系统调用打开它,一旦使用完毕,则用close()系统调用来关闭文件。 1.open #include sys/types.h #include sys/stat.h #include fcntl.h int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 返回值:成功返回新分配的文件描述符,出错返回-1并设置errno eg: int fd; fd = open(/home/kidd/aaa,O_RDONLY); if(fd == -1) /*error*/ pathname 参数是要打开或创建的文件名,和fopen一样,pathname 既可以是相对路径也可以是绝对路径。 flags参数有一系列常数值可供选择,可以同时选择多个常数用按位或运算符连接起来, 所以这些常数的宏定义都以O_开头,表示or 。 以下三个三先一: O_RDONLY 只读打开 O_WRONLY 只写打开 O_RDWR 可读可写打开 以下可多选(以或的形式进行按位或运算,用以修改打开文件请求的行为) O_APPEND 表示追加。如果文件已有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容。 (文件将以追加模式下打开。就是说,在每次写操作之前,文件位置指针将被置于文件末尾,即使 在进程刚刚完成写操作并改变文件位置指针之后,如有另一进程开始写操作,情形也是如此。) O_CREAT 若此文件不存在则由(内核来)创建它。使用此选项时需要提供第三个参数mode,表示该文件的访问权限。 O_EXCL 如果同时指定了O_CREAT,并且文件已存在,则出错返回。 O_TRUNC 如果文件已存在,并且以只写或可读可写方式打开,则将其长度截断(Truncate)为0字节。 O_NONBLOCK 对于设备文件,以O_NONBLOCK方式打开可以做非阻塞I/O (Nonblock I/O ) open()及任何其他操作都不会使该进程在I/O中阻塞(sleep)。这种情况可只用于FIFO。 思考:新文件的所有者是谁?新文件的权限是啥? 例子:下面的代码对文件file进行写操作。如果文件不存在,且假定umask值为022,将建立权限值为0644的文件(即使mode参数指定为0664)。如果文件已存在,它的长度会被截断成0。 int fd; fd = open(file,O_WRONLY|O_CREAT|O_TRUNC,S_IWUSR|S_IRUSR|S_IWGRP|S_IRGRP|S_IROTH); if(fd == -1) /*error*/ 补充:mode参数可以是以下内容: S_IRWXU 所有者拥有读写和执行权限 S_IRUSR 所有者拥有读权限 S_IWUSR 所有者拥有写权限 S_IXUSR 所有者拥有执行权限 S_IRWXG 组拥有读写和执行权限 S_IRGRP 组拥有读权限 S_IWGRP 组拥有写权限 S_IXGRP 组拥有执行权限 S_IRWXO 任何其他人都有读写和执行权限 S_IROTH 任何其他人都有读权限 S_IWOTH 任何其他人都有写权限 S_IXOTH 任何其他人都有执行权限 函数与C 标准I/O 库的fopen函数有些细微的区别: 1 以可写的方式fopen一个文件时,如果文件不存在会自动创建,而open一个文件时必须明 确指定O_CREAT才会创建文件,否则文件不存在就出错返回。 2 以w 或w+方式fopen一个文件时,如果文件已存在就截断为0 字节,而open一个文件时必须 明确指定O_TRUNC才会截断文件,否则直接在原来的数据上改写。 第三个参数mode指定文件权限,可以用八进制数表示,比如0644表示-rw-r--r-- 实验 1.umask 0022 用touch命令创建一个文件时,创建权限是0666,而touch进程继承了Shell进程的umask掩码, 所以最终的文件权限是0666~022=0644 。 2.touch aaa.c ll aaa.c -rw-r--r-- 1 root root 0 01-30 14:18 aaa.c 同样道理,用gcc 编译生成一个可执行文件时,创建权限是0777,而最终的文件权限 是0777~022=0755 。 gcc aaa.c

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档