"in linux, everything is a file." --- <>
3個主要的檔案描述符:
0: 標準輸入
1: 標準輸出
2: 標準錯誤
基本檔案操作
write:
函式宣告:ssize_t write(int fildes, const void *buf, size_t nbytes);
函式功能:把從buf開始的nbytes個位元組寫入描述符為fildes所關聯的檔案中。
返回值: 返回實際寫入的位元組數。返回值可能小於nbytes。如果返回0則
沒有資料寫入;如果返回-1則表示有錯誤發生。
read:
函式宣告:ssize_t read(int fildes, void *buf, size_t nbytes);
函式功能:把描述符為fildes所關聯的檔案中的nbytes個位元組寫入buf中。
返回值: 返回實際讀入的位元組數,可能小於nbytes。如果返回0則表示
沒有資料讀入;如果返回-1則表示有錯誤發生。
open:
函式宣告:int close(int fildes);
函式功能:關閉檔案描述符。
返回值: 0表示成功,-1表示失敗。
ioctl:
函式宣告:int ioctl(int fildes, int cmd, ...);
函式功能:向裝置寫入控制資訊。
返回值: -1表示出錯。
例子:lseek:
函式宣告:off_t lseek(int fildes, off_t offset, int whence);
函式功能:對檔案描述符fildes設定讀寫位置。offset設定讀寫位置,
whence設定offset如何用。whence可以為如下值:
seek_set offset為絕對位置(檔案開始的相對位置)
seek_cur offset為當前位置的相對位置
seek_end offset為檔案結尾的相對位置
返回值: 檔案指標相對於檔案開始的位置。
fstat, stat, and lstat:
函式宣告:int fstat(int fildes, struct stat *buf);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);
函式功能:fstat返回檔案描述符fildes所關聯檔案的資訊;stat、lstat
返回已命名檔案的資訊;如果是符號鏈結,lstat返回符號
鏈結本身的資訊,而stat則返回符號鏈結所引用檔案的資訊。
所返回的檔案資訊儲存在結構體指標buf所指向的空間中。
關於結構體stat的資訊請參閱man 2 stat。
返回值: 如果成功則返回0,否則返回-1。
dup and dup2:
函式宣告:int dup(int fildes);
int dup2(int fildes, int fildes2);
函式功能:返回不同的檔案描述符訪問同乙個檔案。dup返回fildes
所關聯檔案的乙個新檔案描述符;dup2建立fildes的乙個
副本。它們通常用於讀寫同乙個檔案的不同位置,也用於
多個程序通過管道進行通訊。
返回值: 如果出錯則返回-1。
標準i/o庫
參見c語言教程。
檔案流和檔案描述符
每乙個檔案流都和底層的乙個檔案描述符相關聯,你能混合使用它們。
int fileno(file *stream);
file *fdopen(int fildes, const char *mode);
fileno返回檔案檔案流stream的檔案描述符,如果出錯則返回-1;
fdopen為檔案描述符fildes建立檔案流。fildes必須為已開啟的。
fdopen和fopen除了第乙個引數不一樣,其他都一樣。
檔案和目錄的維護
改變許可權:int chmod(const char *path, mode_t mode);
改變所有者:int chown(const char *path, uid_t owner, gid_t group);
unlink, link, and symlink:
函式宣告:int unlink(const char *path);
int link(const char *path1, const char *path2);
int symlink(const char *path1, const char *path2);
函式功能:unlink刪除目錄下的檔案,如果是硬鏈結則還將鏈結數減1.
link建立path2,path2為path1的硬鏈結。
symlink建立path2,path2為path1的軟鏈結。
返回值: 成功返回0,失敗返回-1。
mkdir and rmdir:
函式宣告:int mkdir(const char *path, mode_t mode);
int rmdir(const char *path);
函式功能:mkdir建立許可權為mode的目錄。
rmdir刪除目錄,只有當path為空目錄時才能刪除。
返回值: 成功返回0,失敗返回-1。
chdir and getcwd:
函式宣告:int chdir(const char *path);
char *getcwd(char *buf, size_t size);
函式功能:chdir改變程式執行的的當前目錄。
把程式執行的當前目錄寫入buf,目錄名的長度不能超過size。
返回值: 成功返回0,失敗返回-1。
掃瞄目錄
用dir結構對目錄操作,dir*稱為目錄流(如同file*稱為檔案流一樣)
opendir
函式宣告:dir *opendir(const char *name);
函式功能:opendir開啟乙個目錄。
返回值: 成功則返回乙個dir結構的指標,失敗返回null。
readir
函式宣告:struct dirent *readdir(dir *dirp);
函式功能:在dirp中返回下乙個目錄入口。
返回值: 目錄入口資訊(man dirent)。如果出錯或到達目錄結尾,
則返回null。
telldir
函式宣告:long telldir(dir *dirp);
函式功能:返回目錄流dirp中的當前位置。
返回值:
seekdir
函式宣告:void seekdir(dir *dirp, long loc);
函式功能:設定dirp中的目錄入口指標,loc表示指標的位置。
返回值: 無
closedir
函式宣告:int closedir(dir *dirp);
函式功能:關閉目錄流。
返回值: 成功返回0,失敗返回-1。
例子:高階話題
記憶體對映函式(mmap)設定一段記憶體空間,這段空間可以被多個程式讀寫。
mmap也可以用來操作檔案,它可以使檔案的整個內容看起來像記憶體中的陣列一樣。
函式宣告:void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
函式功能:(man mmap)fildes為檔案描述符;off指定對映的檔案的起始位置;len指定要
對映的長度(也就是記憶體段的長度);prot指定這段記憶體的
訪問許可權,prot可為以下值(可以用or連線):
prot_read 可讀
prot_write 可寫
prot_exec 可執行
prot_none 該記憶體段不能訪問
flags設定這段記憶體的控制資訊,map_private為私有的,map_shared為共享的。
map_shared可以使對這段記憶體的修改反映到檔案中。addr指定這段記憶體空間的
起始位址,如果為0則由系統自動分配(推薦)。
返回值: 如果成功則返回這段記憶體空間的其實位址,失敗返回map_failed。
linux下的檔案操作
徹底刪除檔案 rm rf 檔案目錄 可相對可絕對 是徹底刪除而且linux無 站 建立檔案 touch 檔名 建立資料夾 mkdir 資料夾名 檔案提權 chmod 777 filename 記錄在linux下寫乙個python檔案的過程 1.vim filename py 沒有檔案會自行建立,有就...
linux檔案操作總結
分類 linux 2014 07 31 20 02 13人閱讀收藏 舉報 linux 系統呼叫 標準io庫 檔案操作總結 一 系統呼叫 open open a file or device read read from an open file or device write write to a ...
總結之linux下的操作
在ubuntu下訪問windows的資源。1 unbuntu上連線上網路 2 在windows上共享乙個資料夾,然後在ubuntu上掛載。搜了一下,通過mount來訪問的windows共享目錄下的c 的時候,容易出現這個問題,後面加nounix,noserverino就搞定 mount home c...