首頁 >運維 >linux運維 >Linux檔案操作

Linux檔案操作

坏嘻嘻
坏嘻嘻原創
2018-09-13 18:24:561937瀏覽

本文實例講述了python檔案讀寫操作與linux shell變數指令互動執行的方法。分享給大家供大家參考。具體如下:

檔案操作的相關係統呼叫

建立

#int creat(const char *filename, mode_t mode);
參數mode 指定新建檔案的存取權限,它與umask 一起決定檔案的最終權限(mode&umask),其中umask 代表了檔案在建立時需要去掉的一些存取權限,它只會影響讀取、寫入和執行權限,呼叫函數為int umask (int newmask)。

 

開啟

int open(const char *pathname, int flags);
pathname是我們要開啟的檔案名稱(包含路徑名稱,預設在當前路徑下)

flags開啟的標誌

  • O_RDONLY 以唯讀的方式開啟檔案


  • O_WRONLY 以只寫的方式開啟檔案


  • O_RDWR 以讀寫的方式開啟檔案


  • #O_APPEND 以追加的方式開啟檔案


  • O_CREAT 建立一個檔案


  • #O_EXEC 如果使用了O_CREAT而且檔案已經存在,就會發生一個錯誤


  • #O_NOBLOCK 以非阻塞的方式開啟一個檔案


  • O_TRUNC 如果檔案已經存在,則刪除檔案的內容

int open(const char *pathname,int flag,mode_t mode)

當flag為O_CREATE,指定mode標誌,用來表示檔案的存取權限

  • S_IRUSR 使用者可以讀取


  • S_IWUSR 使用者可以寫


  • S_IXUSR 使用者可以執行


  • #S_IRWXU 使用者可以讀取、寫入、執行


  • S_IRGRP 群組可以讀取


  • ##S_IWGRP 群組可以寫入


  • S_IXGRP 群組可以執行


  • S_IRWXG 群組可以讀寫、執行


  • S_IROTH 其他人可以讀


  • S_IWOTH 其他人可以寫


  • S_IXOTH 其他人可以執行


  • S_IRWXO 其他人可以讀、寫、執行


  • #S_ISUID 設定使用者的執行ID


  • #S_ISGID 設定群組的執行ID

#mode標誌也可以用數字來表示檔案權限:

#每個數字可以取1(執行權限)、2(寫入權限)、4(讀取權限)、0(無)或是這些值的和。

  • 第一位表示設定使用者ID


  • #第二位表示設定群組ID


  • 第三位表示使用者自己的權限位元


  • 第四位表示群組的權限


  • #第五位表示其他人的權限

open("test", O_CREAT, 10705);

上述語句等價於:
open("test", O_CREAT , S_IRWXU | S_IROTH | S_IXOTH | S_ISUID );

 

讀寫

int read(int fd, const void *buf, size_t length);

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

參數fd文件描述符,buf為指向緩衝區的指針,length為緩衝區的大小(以位元組為單位),傳回值為實際讀取和寫入的位元組數。

  • read( )實作從檔案描述子fd所指定的檔案讀取length個位元組到buf所指向的緩衝區中,傳回值為實際讀取的位元組數


  • write( )實作將會將length 個位元組從buf 指向的緩衝區中寫到檔案描述符fd所指向的檔案中,傳回值為實際寫入的位元組數。

 

定位

對於隨機文件,我們可以隨機地指定位置讀寫:

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

lseek()將文件讀寫指標相對whence移動offset(可取負值)個位元組。操作成功時,返回文件指標相對於文件頭的位置。

參數whence可以使用以下值:

SEEK_SET:相對檔案開頭。
SEEK_CUR:相對檔案讀寫指標的目前位置。
SEEK_END:相對文件末尾。
 

關閉

int close(int fd);

C函式庫函數的檔案操作-獨立於特定的作業系統平台

建立和開啟

FILE *fopen(const char *path, const char *mode);

fopen()實作開啟指定檔案filename,其中的mode為開啟模式,Linux系統不區分二進位和文字檔。

mode的值

  • r、rb 以唯讀方式開啟


  • ##w、wb 以只寫方式開啟。如果文件不存在,則建立該文件,否則文件被截斷
  • #

  • a、ab 以追加方式開啟。如果檔案不存在,則建立該檔案


  • #r 、r b、rb 以讀寫方式開啟


  • w 、w b、wh 以讀寫方式開啟。如果文件不存在,則建立新文件,否則文件被截斷


  • #a 、a b、ab 以讀取和追加方式打開。如果檔案不存在,則建立新檔案

 

讀取寫入

int fgetc(FILE *stream);
int fputc(int c, FILE *stream);
char *fgets(char *s, int n, FILE *stream);
int fputs(const char *s, FILE *stream);
int fprintf(FILE * stream, const char *format, ...);
int fscanf (FILE *stream, const char *format, ...);
size_t fread(void *ptr, size_t size, size_t n, FILE * stream);
size_t fwrite (const void *ptr, size_t size, size_t n, FILE *stream);
int fsetpos(FILE *stream, fpos_t *pos);
nt fsetpos(FILE *stream, const fpos_t *pos);
int fseek(FILE *stream, long offset, int whence);

  • fread()實作從stream中讀取n 個字段,每個字段為size個字節,並將讀取的字段放入ptr 所指的字元數組中,傳回實際已讀取的字段數。


  • write()實作從緩衝區ptr 所指的陣列中把n 個欄位寫到stream 中,每個字段長為size個字節,傳回實際寫入的字段數。

 

 

關機

int fclose (FILE *stream);

 

Linux檔案系統目錄結構

Linux檔案操作

  • #/bin----存放著最常用的基本指令,如ls 、cp、mkdir 等,這個目錄中的檔案都是可執行的。


  • /boot----啟動Linux時使用的一些核心文件,包括一些連接文件以及鏡像文件,如vmlinuz、initrd.img 


  • #/dev----裝置檔案儲存目錄,應用程式透過對這些文件的讀寫和控制就可以存取實際的設備。


  • /etc----系統管理所需的設定檔和子目錄,如使用者帳號及密碼設定文件。


  • /home----一般使用者的家目錄,每個使用者都有一個自己的目錄,一般該目錄名是以使用者的帳號命名的。


  • /lib----庫檔案存放目錄,系統最基本的動態連線共用程式庫,類似Windows裡的DLL檔。


  • /lost found----一般情況下是空的,當系統意外崩潰或機器意外關機時會產生一些文件碎片放在這裡。


  • /mnt----方便使用者暫時掛載別的檔案系統的,如將光驅掛載在/mnt/上,進入該目錄就可以查看光碟機裡的內容


  • media----自動辨識一些設備掛載到這個目錄下,例如USB、光碟機等等。


  • /opt----給主機額外安裝軟體所存放的目錄


  • /proc----作業系統執行時,進程及核心資訊(如CPU、硬碟分割區、記憶體資訊等)就存放在這裡。它是系統記憶體的映射,存在在內存,透過直接存取這個目錄來獲取系統資訊。


  • /root----超級權限使用者的家目錄


  • /sbin----超級權限使用者的可執行指令存放目錄,一般使用者無權限執行這個目錄下的指令


  • #/tmp-----存放暫存檔案。


  • /usr-----系統應用程式與檔案(如指令、說明檔)存放程式的目錄,類似windows下的program files目錄。


  • /var-----經常被修改的目錄放在這個目錄下,如日誌檔案


  • /sys----核心裝置樹的一個直覺反映。當一個核心物件被創建的時候,對應的檔案和目錄也在核心物件子系統中被建立。


  • /initrd---若在啟動過程中使用了initrd 映像作為暫存根檔案系統,則在執行完其上的/linuxrc掛接真正的根檔案系統後,原來的初始RAM檔案系統被對應到/initrd目錄。

 

Linux檔案系統與裝置驅動程式

相關建議:

linux 父目錄權限影響子目錄文件操作

python檔案讀寫作業與linux shell變數指令互動執行的方法

 

 

以上是Linux檔案操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn