函數介紹
本文僅僅将
open
系統調用的使用簡單總結一下,關于其實作原理大批的大佬分享可以自行學習。open系統調用主要用于打開或者建立一個檔案,并傳回檔案描述符。
- 頭檔案
#include <fcntl.h>
-
函數名稱
a.
int open(const char *pathname, int flags);
b.
int open(const char *pathname, int flags, mode_t mode);
以上兩個函數參數含義如下:
- pathname 字元串類型的檔案名稱,“a.txt”
- flags 為 以什麼樣的方式打開檔案,主要包括三種
, O_RDONLY
, or O_WRONLY
O_RDWR
,分别是隻讀方式,隻寫方式以及讀寫方式。
此外還有更多的打開方式的标記,可以通過
指令詳細檢視man open
-
mode 為打開檔案時賦予的檔案使用者,使用者組權限
可以通過設定
八進制這種方式來設定,也可以通過0777
類型 的标準mode來設定。标準使用者權限模式如下幾種,該權限的設定可以通過S_IRWXU
|
符号來疊加
a.
S_IRWXU
00700檔案擁有者讀,寫,可執行權限
b.
S_IRUSR
00400 檔案擁有者讀權限
c.
S_IWUSR
00200 檔案擁有者寫權限
d.
S_IXUSR
00100 檔案擁有者可執行權限
e.
S_IRWXG
00070 檔案使用者組讀,寫,可執行權限
f.
S_IRGRP
00040 檔案使用者組讀權限
g.
S_IWGRP
00020 檔案使用者組寫權限
h.
S_IXGRP
00010 檔案使用者組可執行權限
i.
S_IRWXO
00007 其他使用者讀,寫,執行權限
j.
S_IROTH
00004 其他使用者讀權限
k.
S_IWOTH
00002 其他使用者寫權限
l.
00001 其他使用者可執行權限S_IXOTH
函數使用
#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);
//這裡關于檔案不存在,則建立時賦予檔案的權限兩種方式是一樣的,這裡賦予的是00770權限
//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