Linux命令【五】系统函数
系統(tǒng)文件函數(shù)
stat函數(shù)
指針如果沒(méi)有const一般表示傳出參數(shù),如果加const表示傳入?yún)?shù)
struct stat
- dev_t st_dev文件設(shè)備編號(hào)
- ino_t st_ino節(jié)點(diǎn)
inode號(hào)是唯一的,每個(gè)inode節(jié)點(diǎn)的大小一般是128字節(jié)活著256字節(jié),一般文件每2KB就設(shè)置一個(gè)inode - mode_t st_mode文件類型和存取權(quán)限,16bite,4bite文件類型 4bit特殊權(quán)限位 3*4bit訪問(wèn)權(quán)限
- nlink_t st_nlink文件的硬鏈接數(shù)目
- uid_t st_uid用戶ID
- gid_t st_gid組ID
- dev_t st_rdev若文件為設(shè)備文件,則為其設(shè)備編號(hào)
- off_t st_size文件字節(jié)數(shù)
- blksize_t st_blksize塊大小(文件系統(tǒng)的I/O緩沖區(qū)大小)
- blkcnt_t st_blocks快數(shù)
- time_t st_atime最后一次訪問(wèn)時(shí)間
- time_t st_mtime最后一次修改時(shí)間
- time_t st_ctime最后一次改變時(shí)間:指屬性,包括訪問(wèn),修改內(nèi)容,修改類型等
stat函數(shù)和lstat函數(shù)的區(qū)別:對(duì)于軟鏈接,前者是穿透(追蹤)函數(shù),后者是不穿透(不追蹤)函數(shù)
access測(cè)試文件是否有某種權(quán)限
chmod 改變文件權(quán)限
可以使用第3章strtol函數(shù)將字符串轉(zhuǎn)化為數(shù)字
chown 改變文件所有者
可以查看passwd文件(詳見(jiàn)手冊(cè)第5章)
truncate函數(shù)
文件的截取和拓展
#include <unistd.h> #include <sys/types.h>int truncate(const char *path, off_t length); int ftruncate(int fd, off_t length);多出來(lái)的方式仍然是以空洞的方式儲(chǔ)存
link函數(shù)
創(chuàng)建硬鏈接
#include <unistd.h>int link(const char *oldpath, const char *newpath);#include <fcntl.h> /* Definition of AT_* constants */ #include <unistd.h>int linkat(int olddirfd, const char *oldpath,int newdirfd, const char *newpath, int flags);symlink 函數(shù)
創(chuàng)建軟鏈接
readlink 函數(shù)
讀一個(gè)軟鏈接
unlink 函數(shù)
如果是軟鏈接,則刪除軟鏈接
如果是硬鏈接,則刪除當(dāng)前硬鏈接,硬鏈接數(shù)減一,當(dāng)減為0時(shí),釋放數(shù)據(jù)塊和inode
使用unlink可以制作臨時(shí)文件:如果文件硬鏈接數(shù)為0,但有進(jìn)程已經(jīng)打開(kāi)文件,并且持有文件描述符,則等該進(jìn)程關(guān)閉文件時(shí)kernel才真正刪除文件,因此可以先open|creat一個(gè)文件,然后再使用文件描述符操作該文件,同時(shí)使用unlink函數(shù)刪去,則創(chuàng)造出了一個(gè)臨時(shí)文件
每一次unlink其實(shí)是刪除一個(gè)目錄項(xiàng)(denty),當(dāng)所有占用該文件的進(jìn)程使用結(jié)束或者進(jìn)程關(guān)閉文件才會(huì)失效
操作文件的時(shí)候需要注意文件指針,尤其是寫(xiě)操作以后想要讀取的時(shí)候
rename函數(shù)
目錄操作函數(shù)
chdir函數(shù)
相當(dāng)于cd命令,改變的是所在進(jìn)程的路徑,而不是終端的路徑
getcwd函數(shù)
相當(dāng)于pwd命令,獲取進(jìn)程當(dāng)前目錄
mkdir函數(shù)
需要注意創(chuàng)建的目錄需要有執(zhí)行權(quán)限,否則無(wú)法進(jìn)入目錄
rmdir函數(shù)
刪除一個(gè)空目錄
opendir函數(shù)(下面開(kāi)始變成手冊(cè)第三章的函數(shù)了)
成功返回一個(gè)DIR指針,失敗返回NULL
readdir函數(shù)
讀取目錄內(nèi)容,返回一個(gè)結(jié)構(gòu)體struct dirent
- ino_t ino目錄的inode
- ff_t d_off目錄文件開(kāi)頭到此目錄進(jìn)入點(diǎn)的位移
- signed short int d_reclend_name的長(zhǎng)度
- unsigned char d_type 文件的類型
closedir函數(shù)
dup 和dup2
查閱手冊(cè)第二章
用于復(fù)制文件描述符,可以讓多個(gè)文件描述符指向同一個(gè)文件
dup(old fd)函數(shù):返回一個(gè)文件描述符,指向舊文件描述符所指向的文件,返回的是所有未占用的文件描述符中最小的一個(gè)
dup2(old fd,new fd)函數(shù):指向新的文件描述符,如果新文件描述符原本指向一個(gè)文件則將該文件釋放,再指向舊文件描述符所指向的文件。如果new和old是同一個(gè)文件描述符則不會(huì)關(guān)閉。
雖然可能有多個(gè)文件描述符,但是只有一個(gè)文件指針
這里的文件覆蓋并不是清空,而是在原來(lái)文件上面寫(xiě)
fcntl函數(shù)
改變已經(jīng)打開(kāi)的文件的屬性
- 復(fù)制一個(gè)現(xiàn)有的文件描述符
- 獲得/設(shè)置文件描述符標(biāo)記
- 獲得/設(shè)置文件狀態(tài)標(biāo)記
cmd=F_GETFL,arg=0就可以,返回文件的狀態(tài)flag=fcntl(fd,F_GETFL,0)
cmd=F_SETFL,arg=flag|O_APPEND/O_NONBLOCK
O_APPEND在末尾追加
- 獲得/設(shè)置異步I/O所有權(quán)
- 獲得/設(shè)置記錄鎖
總結(jié)
以上是生活随笔為你收集整理的Linux命令【五】系统函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 不孕不育的男性能生育吗
- 下一篇: Linux系统【一】CPU+MMU+fo