linux系統函式積累

2021-07-04 13:55:02 字數 2339 閱讀 9444

// 開啟檔案

int open(const char *pathname, int flags);

pathname 文加名,可以是相對路徑或絕對路徑

flags 開啟的模式

必須有以下三個中之一:

o_rdonly 唯讀

o_wronly 只寫

o_rdwr 讀寫

o_trunc 清空檔案 只用到普通檔案

返回值:

成功:非負整數的檔案描述符

失敗:-1

// 建立並開啟檔案

int open(const char *pathname, int flags, mode_t mode);

flags 在原來的基礎上加上:

o_creat 建立檔案

o_excl 必須和o_creat一起使用,表示如果檔案不存在

就建立,如果檔案存在就失敗

open("",

o_rdwr

o_rdonly

o_rwonly

o_rdwr|o_creat

o_rdrw|o_creat|o_excl

建立檔案時,許可權會受到umask的影響

mode = mode & ~umask

如果建立的檔案不想被umask影響,可以通過系統提供的umask函式來更改

// 更改umask值

mode_t umask(mode_t mask);   //返回值為舊mask

mask 新設定的umask值

返回舊umask值

//讀檔案:

ssize_t read(int fd, void *buf, size_t count);

// 從fd檔案中讀取最多count個資料到buf中

返回值 > 0 讀取到的位元組數

= 0 讀到檔案結尾了

= -1 出錯

//寫檔案:

ssize_t write(int fd, const void *buf, size_t count); 

// 從buf位置開始寫最多count個資料到fd檔案中

返回值 實際寫入的位元組數

//read和write的不同:

read返回表示資料從磁碟讀到應用程式緩衝區

write返回僅僅表示資料寫入到核心緩衝區,

如果需要write等到實際寫入磁碟再返回,需要在open加入o_sync

也可以通過fsync(int fd) 這個函式將核心快取中的資料刷入磁碟

//關閉檔案

int close(int fd);
//檔案的隨機讀寫

通過定位基於開始位置,當前位置,檔案末尾的偏移offset個位元組來重新定位

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

off_t offset, // 偏移量

// seek_set 檔案開頭

// seek_cur 檔案當前位置

// seek_end 檔案末尾

空洞檔案

//獲得記憶體頁大小

int getpagesize(void);
//截斷檔案

int ftruncate(int fd, off_t length);

// 將fd檔案截斷程length長

// 如果length小於原來檔案長度,原始檔多餘部分被丟棄

// 如果length大於原始檔,會擴張檔案長度,並且多餘部分補成\0

可以用以下命令去檢視:

cat //檢視當前檔案內容

ls -l //

du -h //檢視

od -c

目錄操作

// 開啟目錄

dir *opendir(const char *name);
//讀取檔案:

struct dirent *readdir(dir *dirp);

struct dirent ;

// 讀取目錄的內容

// 每次讀取會自動偏移到下乙個

// 讀取完畢返回null

//關閉檔案:

int closedir(dir *dirp);

Linux系統用到命令積累

1 修改密碼命令 非root身份 輸入passwd,會提示輸入當前使用者所用的密碼,輸入後提示輸入新密碼,需輸入兩次。當第一次登入linux系統時,可以使用sudo passwd root來為root設定密碼,一旦密碼設定好後,就不能再通過這個方法來更改了。root身份 輸入passwd後會要求直接...

delphi split函式 積累

function splitstring const source,ch string tstringlist vartemp string i integer chlength integer begin result tstringlist.create 如果是空自符串則返回空列表 if sou...

excel函式積累

1 根據日期計算星期幾 1 weekday serial number,return type serial number 必需。乙個序列號,代表嘗試查詢的那一天的日期。應使用 date 函式輸入日期,或者將日期作為其他公式或函式的結果輸入。例如,使用函式 date 2008,5,23 輸入 200...