首页 > 系统服务 > 详细

Linux系统编程笔记

时间:2015-09-01 00:05:53      阅读:294      评论:0      收藏:0      [点我收藏+]

写在开篇:出于对未来职业规划的考虑(其实还是一团糟),制定了一个基本的学习方向,那就是从系统编程学习API慢慢的深入内核,这是一个比较成熟的学习路线。所以从本篇开始,在这段时间会陆续记录Linux系统编程的学习笔记,除了供学习之余复习只用,同时也期望能记录初入职场摸爬滚打的第一个3年。

第一章 文件I/O

    文件访问的基本调用一般是 read()和write(),但是在访问文件之前,要做的是一项很重要的工作就是:打开,没错!通过调用 open()或create()实现

#include <sys/type.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *name,int flags)
int open(const char *name,int flags,mode_t mode);

调用成功返回 fd(指向name所指的文件),打开方式根据 flags确定。

flags参数有三种访问模式 O_RDONLY,O_WRONLY,O_RDWR

flags参数还可以与以下参数按位或运算,丰富打开文件的方式

O_APPEND:追加模式打开,指针指向文件末尾 (name指针)


O_ASYNC:对于特殊文件(FIFO、管道、socket、终端),如果可读或可写,会产生信号(默认为SIGIO)


O_CLOEXEC:执行时关闭,在执行新进程时,文件自动关闭,避免竞争。


O_CREAT:name指定文件不存在时,自动创建;如文件存在此位和O_EXCL联合使用,否则无效。


O_DIRECT:打开文件用于直接I/O


O_DIRECTORY:如果参数name不是目录,open()调用失败,该位置位时,其实内部会调用opendir()

DIR* opendir(const char *path)

成功返回fd,失败返回空指针NULL。


O_EXCL:上文O_CREAT()联合使用,如果name参数指定的文件存在则 open()调用失败,防止创建文件时的竞争。


O_LARGEFILE:文件偏移使用64位整数表示,支持大于2G的文件,64位系统默认使用该参数


O_NOATIME+:读文件时不更新最后访问时间,可用于:备份、索引等操作,避免为了更新每个文件的索引节点而导致的大量写操作。


O_NOCTTY:如果给定的name参数指向终端设备,它不会成为这个进程的控制终端。很少用该标志位。


O_NOFOLLOW:如果 name指向一个符号连接,open()会失败。正常情况下,会解析符号连接并打开文件,如果子目录还是链接,open()还是会解析并打开文件。 这种情况可以用到 名人的博客可以用此标志位,即在他博客添加链接是无效的。


O_NONBLOCK:非阻塞模式打开,不管是open()还是其他操作,都不会导致进程在I/O中阻塞(sleep)。只适用于FIFO。


O_SYNC:打开文件用于同步I/O,每次write()之后,数据都会同步到物理磁盘


O_TRUNC:如果文件存在,是普通文件,有写权限,该位置位会把文件长度截断为0。

Linux系统编程笔记

原文:http://joseph11.blog.51cto.com/10576741/1690262

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!