标签:编程学习 include 职业规划 linux create
写在开篇:出于对未来职业规划的考虑(其实还是一团糟),制定了一个基本的学习方向,那就是从系统编程学习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。
标签:编程学习 include 职业规划 linux create
原文地址:http://joseph11.blog.51cto.com/10576741/1690262