Linux常用函數__Oracle

來源:互聯網
上載者:User

1.        建立檔案夾的函數:

                  extern int mkdir(_const char *_path,_mode_t _mode);

                  失敗返回-1,成功返回1。

2.        刪除檔案夾函數:

                  extern int rmdir(_const char *_path);

                  失敗返回-1,成功返回1。

3.        write的系統調用:

#include <unistd.h>

size_t  write(int fildes, const void*buf, size_t nbytes);

Example:

     write(2, “Here is somedata\n”, 18);

傳回值:

         -1:寫入失敗;

         非-1:寫入字元的個數。

4.        read系統調用:

#include <unistd.h>

size_t read(int filedes, void *buf, size_t nbytes);

傳回值:

         -1:讀取出錯;

         非-1:讀入的資料字元個數。

5.        open系統調用

#include <fcntl.h>

#include <sys/types.h>

#include <sys/stat.h>

int open(const char *path, int oflags);

int open(const char *path, int oflags, mode_t mode);

傳回值:返迴文件描述符。

oflags:     

O_RDONLY

唯讀

O_WRONLY

唯寫

O_RDWR

讀寫

O_APPEND

追加

O_TRUNC

清除檔案再寫

O_CREAT

按照mode參數來建立檔案

O_EXCL

與O_CREAT模式共同使用,確保建立檔案

mode:

                  

S_IRWXU

00700許可權

代表該檔案所有者具有可讀、可寫及可執行檔許可權。

S_IRUSR或S_IREAD

00400許可權

代表該檔案所有者具有可讀取的許可權。

S_IWUSR或S_IWRITE

00200許可權

代表該檔案所有者具有可寫入的許可權。

S_IXUSR或S_IEXEC

00100許可權

代表該檔案所有者具有可執行檔許可權。

S_IRWXG

00070許可權

代表該檔案使用者組具有可讀、可寫及可執行檔許可權。

S_IRGRP

00040許可權

代表該檔案使用者組具有可讀的許可權。

S_IWGRP

00020許可權

代表該檔案使用者組具有可寫入的許可權。

S_IXGRP

00010許可權

代表該檔案使用者組具有可執行檔許可權。

S_IRWXO

00007許可權

代表其他使用者具有可讀、可寫及可執行檔許可權。

S_IROTH

00004許可權

代表其他使用者具有可讀的許可權

S_IWOTH

00002許可權

代表其他使用者具有可寫入的許可權。

S_IXOTH

00001許可權

代表其他使用者具有可執行檔許可權。

Example:

         Open(“myfile”, O_CREAT,S_IRUSR|S_IXOTH);

6.        close系統調用

#include <unistd.h>

int close(int fildes);

傳回值:

         -1:出錯;

         0:成功。

7.        設定(一個檔案描述符)檔案指標的位移量

#include <unistd,h>

#include <sys/types.h>

off_t lseek(int fildes, off_t offset, int whence);

參數:

         fildes:檔案描述符;

         offset: 要設定檔案指標要的位置;

         whence:定義位移值的用法,可取下面值:

SEEK_SET

offset是一個絕對文章

SEEK_CUR

offset是一個相對於當前的相對位置

SEEK_END

offset是一個相對於檔案尾的相對位置

8.        檔案狀態系統調用

#include <unistd.h>

#include <sys/stat.h>

#include <sys/sypes.h>

int fstat(int fildes, struct stat *buf);

int stat(const char *path, struct stat *buf);

int lstat(const char *path, struct stat *buf);

參數:

         fildes:檔案描述符

         path:路徑;

buf:檔案資訊結構體變數。

         其中, 如果路徑為連結檔案,lstat返回的是連結本身的連結,而stat返回的是連結檔案指向檔案的資訊。

         structstat {

                       dev_t         st_dev;       //檔案的裝置編號

                       ino_t         st_ino;       //節點

                       mode_t        st_mode;      //檔案的類型和存取的許可權

                       nlink_t       st_nlink;     //連到該檔案的硬串連數目,剛建立的檔案值為1

                       uid_t         st_uid;       //使用者ID

                       gid_t         st_gid;      //組ID

                       dev_t         st_rdev;      //(裝置類型)若此檔案為裝置檔案,則為其裝置編號

                       off_t         st_size;      //檔案位元組數(檔案大小)

                       unsigned long st_blksize;   //塊大小(檔案系統的I/O 緩衝區大小)

                       unsigned long st_blocks;    //塊數

                       time_t        st_atime;     //最後一次訪問時間

                       time_t        st_mtime;     //最後一次修改時間

                       time_t        st_ctime;     //最後一次改變時間(指屬性)

};

9.        複製檔案描述符,使通過不同的檔案描述符訪問同一個檔案

#include <unistd.h>

int dup(int fildes);

int dup2(int fildes, int fildes2);

10.    向裝置發送資料

#include<sys/ioctl.h>

int ioctl(int handle, int cmd,[int *argdx, int argcx]);

功能:控制I/O裝置 ,提供了一種獲得裝置資訊和向裝置發送控制參數的手段。用於向裝置發控制和配置命令 ,有些命令需要控制參數,這些資料是不能用read / write 讀寫的,稱為Out-of-band資料。也就是說,read / write 讀寫的資料是in-band資料,是I/O操作的主體,而ioctl 命令傳送的是控制資訊,其中的資料是輔助的資料

傳回值:成功為0,出錯為-1

參數cmd(部分):

#define _IOC_NRBITS 8 //序數(number)欄位的字位寬度,8bits

#define _IOC_TYPEBITS 8 //幻數(type)欄位的字位寬度,8bits

#define _IOC_SIZEBITS 14 //大小(size)欄位的字位寬度,14bits

#define _IOC_DIRBITS 2 //方向(direction)欄位的字位寬度,2bits

#define _IOC_NRMASK ((1 <<_IOC_NRBITS)-1) //序數欄位的掩碼,0x000000FF

#define _IOC_TYPEMASK ((1 <<_IOC_TYPEBITS)-1) //幻數欄位的掩碼,0x000000FF

#define _IOC_SIZEMASK ((1 <<_IOC_SIZEBITS)-1) //大小欄位的掩碼,0x00003FFF

#define _IOC_DIRMASK ((1 <<_IOC_DIRBITS)-1) //方向欄位的掩碼,0x00000003

#define _IOC_NRSHIFT 0 //序數欄位在整個欄位中的位移,0

#define _IOC_TYPESHIFT(_IOC_NRSHIFT+_IOC_NRBITS) //幻數欄位的位移,8

#define _IOC_SIZESHIFT(_IOC_TYPESHIFT+_IOC_TYPEBITS) //大小欄位的位移,16

#define _IOC_DIRSHIFT(_IOC_SIZESHIFT+_IOC_SIZEBITS) //方向欄位的位移,30

11.    資料同步函數

#include<unistd.h>

int sync(void);

函數說明:此函數負責將系統緩衝區的內容寫回磁碟,以確保資料同步

12.    查詢檔案系統相關的資訊

#include <sys/vfs.h>    /* 或者 <sys/statfs.h> */

int statfs(const char *path,struct statfs *buf);

intfstatfs(int fd, struct statfs *buf);

參數:

path: 位於需要查詢資訊的檔案系統的檔案路徑名。  

fd: 位於需要查詢資訊的檔案系統的檔案描述詞。

buf:以下結構體的指標變數,用於儲存檔案系統相關的資訊

struct statfs {

long    f_type;    /* 檔案系統類型  */

long    f_bsize;   /* 經過最佳化的傳輸塊大小  */

long    f_blocks;  /* 檔案系統資料區塊總數 */

long    f_bfree;   /* 可用塊數 */

long    f_bavail;  /* 非超級使用者可擷取的塊數 */

long    f_files;   /* 檔案結點總數 */

long    f_ffree;   /* 可用檔案結點數 */

fsid_t  f_fsid;    /* 檔案系統標識 */

long    f_namelen; /* 檔案名稱的最大長度 */

};

傳回值:

成功執行時,返回0。失敗返回-1,errno被設為以下的某個值:

EACCES: (statfs())檔案或路徑名中包含的目錄不可訪問

EBADF     : (fstatfs()) 檔案描述詞無效

EFAULT     :記憶體位址無效

EINTR      :操作由訊號中斷

EIO            :讀寫出錯

ELOOP     : (statfs())解釋路徑名過程中存在太多的符號串連

ENAMETOOLONG:(statfs()) 路徑名太長

ENOENT   :(statfs()) 檔案不存在

ENOMEM         :核心記憶體不足

ENOSYS    :檔案系統不支援調用

ENOTDIR :(statfs())路徑名中當作目錄的組件並非目錄

EOVERFLOW:資訊溢出

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.