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:資訊溢出