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
pathname
参数是要打开或创建的文件名,和fopen
一样,pathname
既可以是相对路径也可以是绝对路径。
flags
参数有一系列常数值可供选择,可以同时选择多个常数用按位或运算符连接起来,所以这些常数的宏定义都以O_
开头,表示or。
必选项:以下三个常数中必须指定一个,且仅允许指定一个。
O_RDONLY
只读打开O_WRONLY
只写打开O_RDWR
可读可写打开以下可选项可以同时指定0个或多个,和必选项按位或起来作为flags
参数。
O_APPEND
表示追加。如果文件已有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容。O_CREAT
若此文件不存在则创建它。使用此选项时需要提供第三个参数mode
,表示该文件的访问权限。O_EXCL
如果同时指定了O_CREAT
,并且文件已存在,则出错返回。O_TRUNC
如果文件已存在,并且以只写或可读可写方式打开,则将其长度截断(Truncate)为0字节。O_NONBLOCK
对于设备文件,以O_NONBLOCK
方式打开可以做非阻塞I/O(Nonblock I/O)。mode
指定文件权限,可以用八进制数表示,比如0644表示-rw-r--r--
,也可以用S_IRUSR
、S_IWUSR
等宏定义按位或起来表示,详见open(2)
的Man Page。要注意的是,文件权限由open
的mode
参数和当前进程的umask
掩码共同决定。close
函数关闭一个已打开的文件:#include <unistd.h> int close(int fd); 返回值:成功返回0,出错返回-1并设置errno
//filename:test.c // #include <error.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main(int argc, const char *argv[]) { int fd = open("mytest", O_RDWR | O_CREAT, 0666); if (fd == -1) perror("open file mytest"); close(fd); return 0; }
编译:$cc test.c 执行:$./a.out 查看结果:$umask 0002 $ll 总计 12 -rwxrwxr-x 1 joseph joseph 5085 12-17 10:35 a.out -rw-rw-r– 1 joseph joseph 0 12-17 10:33 mytest -rw-rw-r– 1 joseph joseph 263 12-17 10:35 test.c 以上例子以mode 0666创建一个文件mytest,而umask是0002, 所以创建的文件权限是0666-0002=0664(-rw-rw-r–)。
2015年11月05日 17:42
多謝分享!
2018年3月08日 17:23
有一个问题就是我们见到的方法和博客中描述的方法不太相同这件事怎么解释呢?
/usr/include/x86_64-linux-gnu/bits/fcntl2.h
__fortify_function int open (const char *__path, int __oflag, ...)
2019年9月19日 18:43
您好!我是學徒目前也是看LINUX C語言書本
有一行O_CREAT, 0666(-rw-rw-r–)這個是檔案目錄不存在建立之後面多了0666....
看您程式碼後我學會一部分了!!實在感謝
2019年11月03日 09:48
敬启者:个人小网站希望大家多多支持 感谢您对我们热心的支持 f88tw┃华歌尔┃I appreciate your kind assistance. <a data-cke-saved-href="http://mypaper.pchome.com.tw/f88tw" href="http://mypaper.pchome.com.tw/f88tw" "="">http://mypaper.pchome.com.tw/f88tw http://mypaper.pchome.com.tw/f88tw/P1 http://mypaper.pchome.com.tw/f88tw/post/1379131888 http://mypaper.pchome.com.tw/f88tw/post/1370781143 f88tw| 捡骨师| 佛经哥|墓园|禁忌|新竹|台北|桃园|苗栗|头份
2019年12月28日 08:27
敬启者:个人小网站希望大家多多支持 感谢您对我们热心的支持 f88tw┃华歌尔┃I appreciate your kind assistance. f88tw|墓园|捡骨流程|捡骨费用|捡骨时间|禁忌|捡骨颜色|捡骨师|新竹|时间|台北|桃园|苗栗|头份|火化|晋塔|安葬|法事|捡骨|看日子|墓穴|墓园|坟墓
2021年3月27日 11:54
敬启者:个人小网站希望大家多多支持 感谢您对我们热心的支持 f88tw┃华歌尔┃I appreciate your kind assistance. f88tw|墓园|捡骨流程|捡骨费用|捡骨时间|禁忌|捡骨颜色|捡骨师|新竹|时间|台北|桃园|苗栗|头份|火化|墓穴|墓园|坟墓 |http://mypaper.m.pchome.com.tw/f88tw
2021年4月07日 20:55
敬启者:个人小网站希望大家多多支持 感谢您对我们热心的支持 f88tw┃华歌尔┃I appreciate your kind assistance. f88tw| 粗工| 粗工内容 | 粗工| 粗工内容 |墓园|捡骨流程|捡骨费用|捡骨时间|禁忌|捡骨颜色|捡骨师|新竹|时间|台北|桃园|苗栗|头份|https://mypaper.m.pchome.com.tw/f88tw
2022年9月17日 20:15
For all chapters of the course, get the CBSE Board Class 3 Sanskrit Sample Paper 2023 Pdf. Every year, the board's subject-matter experts establish and revise the course syllabus for all sessions of Terms 1 and 2. CBSE Class 3 Sanskrit Question Paper Download the practise question bank from Set wide to practise at home if you have selected Sanskrit as your second or third language. For the most crucial questions for each chapter of the course, get in touch with your class teacher at the university.
2023年3月12日 15:13
敬啟者:個人小網站希望大家多多支持 感謝您對我們熱心的支持 f88tw|華歌爾|I appreciate your kind assistance.
https://mypaper.pchome.com.tw/f88tw
f88tw|修墳|修墓|新竹|桃園|苗栗|撿骨|拾骨|發票
https://mypaper.pchome.com.tw/f88tw/post/1370781143
https://mypaper.m.pchome.com.tw/f88tw/post/1370781143