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