linux 系统调用 open函数使用
生活随笔
收集整理的這篇文章主要介紹了
linux 系统调用 open函数使用
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
函數(shù)介紹
本文僅僅將open系統(tǒng)調(diào)用的使用簡(jiǎn)單總結(jié)一下,關(guān)于其實(shí)現(xiàn)原理大批的大佬分享可以自行學(xué)習(xí)。open系統(tǒng)調(diào)用主要用于打開或者創(chuàng)建一個(gè)文件,并返回文件描述符。
- 頭文件
#include <fcntl.h> - 函數(shù)名稱
a.int open(const char *pathname, int flags);
b.int open(const char *pathname, int flags, mode_t mode);
以上兩個(gè)函數(shù)參數(shù)含義如下:
- pathname 字符串類型的文件名稱,“a.txt”
- flags 為 以什么樣的方式打開文件,主要包括三種
O_RDONLY,O_WRONLY, orO_RDWR,分別是只讀方式,只寫方式以及讀寫方式。
此外還有更多的打開方式的標(biāo)記,可以通過man open命令詳細(xì)查看 - mode 為打開文件時(shí)賦予的文件用戶,用戶組權(quán)限
可以通過設(shè)置0777八進(jìn)制這種方式來設(shè)置,也可以通過S_IRWXU類型 的標(biāo)準(zhǔn)mode來設(shè)置。標(biāo)準(zhǔn)用戶權(quán)限模式如下幾種,該權(quán)限的設(shè)置可以通過|符號(hào)來疊加
a.S_IRWXU00700文件擁有者讀,寫,可執(zhí)行權(quán)限
b.S_IRUSR00400 文件擁有者讀權(quán)限
c.S_IWUSR00200 文件擁有者寫權(quán)限
d.S_IXUSR00100 文件擁有者可執(zhí)行權(quán)限
e.S_IRWXG00070 文件用戶組讀,寫,可執(zhí)行權(quán)限
f.S_IRGRP00040 文件用戶組讀權(quán)限
g.S_IWGRP00020 文件用戶組寫權(quán)限
h.S_IXGRP00010 文件用戶組可執(zhí)行權(quán)限
i.S_IRWXO00007 其他用戶讀,寫,執(zhí)行權(quán)限
j.S_IROTH00004 其他用戶讀權(quán)限
k.S_IWOTH00002 其他用戶寫權(quán)限
l.S_IXOTH00001 其他用戶可執(zhí)行權(quán)限
返回值 操作系統(tǒng)會(huì)為當(dāng)前進(jìn)程從3開始分配一個(gè)未使用的文件描述符,因?yàn)?,1,2已經(jīng)被stdin,stdout,stderr三個(gè)默認(rèn)打開的文件占用。
函數(shù)使用
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>int main(int argc, char *argv[])
{int fd;if (argc < 2) {printf("./a.out filename \n");exit(1);}umask(0);//這里關(guān)于文件不存在,則創(chuàng)建時(shí)賦予文件的權(quán)限兩種方式是一樣的,這里賦予的是00770權(quán)限//fd=open(argv[1],O_CREAT | O_RDWR, S_IRWXU|S_IRWXG);fd=open(argv[1],O_CREAT | O_RDWR, 0770);printf("%d\n",fd);close(fd);return 0;
}
輸出如下:
zhang@ubuntu:~/test$ gcc test_open.c
zhang@ubuntu:~/test$ ./a.out test.txt
3
zhang@ubuntu:~/test$ ls -l test.txt
-rwxrwx--- 1 zhang zhang 0 Sep 15 03:37 test.txt
總結(jié)
以上是生活随笔為你收集整理的linux 系统调用 open函数使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux进程通信:pipe实现进程同步
- 下一篇: linux 系统调用 read,writ