天天看點

linux 系統調用 open函數使用

函數介紹

本文僅僅将​

​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​

    ​​, ​

    ​O_WRONLY​

    ​​, or ​

    ​O_RDWR​

    ​​,分别是隻讀方式,隻寫方式以及讀寫方式。

    此外還有更多的打開方式的标記,可以通過​​

    ​man open​

    ​指令詳細檢視
  • mode 為打開檔案時賦予的檔案使用者,使用者組權限

    可以通過設定​​

    ​0777​

    ​​八進制這種方式來設定,也可以通過​

    ​S_IRWXU​

    ​​類型 的标準mode來設定。标準使用者權限模式如下幾種,該權限的設定可以通過​

    ​|​

    ​​符号來疊加

    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. ​​

    ​S_IXOTH​

    ​ 00001 其他使用者可執行權限

函數使用

#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