Linux常用函數

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:信息溢出

發佈了30 篇原創文章 · 獲贊 11 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章