Linux文件操作

本文實例講述了python文件讀寫操作與linux shell變量命令交互執(zhí)行的方法。分享給大家供大家參考。具體如下:

文件操作的相關系統調用

創(chuàng)建

int creat(const char *filename, mode_t mode);
參數mode 指定新建文件的存取權限,它同umask 一起決定文件的最終權限(mode&umask),其中umask 代表了文件在創(chuàng)建時需要去掉的一些存取權限,它只影響讀、寫和執(zhí)行權限,調用函數為int umask(int newmask)。

?

打開

int open(const char *pathname, int flags);
pathname是我們要打開的文件名(包含路徑名稱,默認在當前路徑下)

flags打開的標志

  • O_RDONLY 以只讀的方式打開文件

  • O_WRONLY 以只寫的方式打開文件

  • O_RDWR 以讀寫的方式打開文件

  • O_APPEND 以追加的方式打開文件

  • O_CREAT 創(chuàng)建一個文件

  • O_EXEC 如果使用了O_CREAT而且文件已經存在,就會發(fā)生一個錯誤

  • O_NOBLOCK 以非阻塞的方式打開一個文件

  • O_TRUNC 如果文件已經存在,則刪除文件的內容

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

當flag為O_CREATE,指定mode標志,用來表示文件的訪問權限

  • S_IRUSR 用戶可以讀

  • S_IWUSR 用戶可以寫

  • S_IXUSR 用戶可以執(zhí)行

  • S_IRWXU 用戶可以讀、寫、執(zhí)行

  • S_IRGRP 組可以讀

  • S_IWGRP 組可以寫

  • S_IXGRP 組可以執(zhí)行

  • S_IRWXG 組可以讀、寫、執(zhí)行

  • S_IROTH 其他人可以讀

  • S_IWOTH 其他人可以寫

  • S_IXOTH 其他人可以執(zhí)行

  • S_IRWXO 其他人可以讀、寫、執(zhí)行

  • S_ISUID 設置用戶的執(zhí)行ID

  • S_ISGID 設置組的執(zhí)行ID

mode標志也可以用數字來表示文件權限:

每個數字可以取1(執(zhí)行權限)、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為指向緩沖區(qū)的指針,length為緩沖區(qū)的大小(以字節(jié)為單位),返回值為實際讀取和寫入的字節(jié)數。

  • read( )實現從文件描述符fd所指定的文件中讀取length個字節(jié)到buf所指向的緩沖區(qū)中,返回值為實際讀取的字節(jié)數

  • write( )實現將把length 個字節(jié)從buf 指向的緩沖區(qū)中寫到文件描述符fd所指向的文件中,返回值為實際寫入的字節(jié)數。

?

定位

對于隨機文件,我們可以隨機地指定位置讀寫:
int lseek(int fd, offset_t offset, int whence);

lseek()將文件讀寫指針相對whence移動offset(可取負值)個字節(jié)。操作成功時,返回文件指針相對于文件頭的位置。

參數whence可以使用如下值:
SEEK_SET:相對文件開頭。
SEEK_CUR:相對文件讀寫指針的當前位置。
SEEK_END:相對文件末尾。
?

關閉

int close(int fd);

?

C庫函數的文件操作——獨立于具體的操作系統平臺

創(chuàng)建和打開

FILE *fopen(const char *path, const char *mode);
fopen()實現打開指定文件filename,其中的mode為打開模式,linux 系統不區(qū)分二進制文件和文本文件。

mode的值

  • r、rb 以只讀方式打開

  • w、wb 以只寫方式打開。如果文件不存在,則創(chuàng)建該文件,否則文件被截斷

  • a、ab 以追加方式打開。如果文件不存在,則創(chuàng)建該文件

  • r+、r+b、rb+ 以讀寫方式打開

  • w+、w+b、wh+ 以讀寫方式打開。如果文件不存在,則創(chuàng)建新文件,否則文件被截斷

  • a+、a+b、ab+ 以讀和追加方式打開。如果文件不存在,則創(chuàng)建新文件

?

讀寫

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個字節(jié),并將讀取的字段放入ptr 所指的字符數組中,返回實際已讀取的字段數。

  • write()實現從緩沖區(qū)ptr 所指的數組中把n 個字段寫到stream 中,每個字段長為size個字節(jié),返回實際寫入的字段數。

?

?

關閉

int fclose (FILE *stream);

?

?

Linux文件系統目錄結構

Linux文件操作

  • /bin—-存放著最經常使用的基本命令,如ls、cp、mkdir 等,這個目錄中的文件都是可執(zhí)行的。

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

  • /dev—-設備文件存儲目錄,應用程序通過對這些文件的讀寫和控制就可以訪問實際的設備。

  • /etc—-系統管理所需要的配置文件和子目錄,如用戶賬號及密碼配置文件。

  • /home—-普通用戶的家目錄,每個用戶都有一個自己的目錄,一般該目錄名是以用戶的賬號命名的。

  • /lib—-庫文件存放目錄,系統最基本的動態(tài)連接共享庫,類似于windows里的DLL文件。

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

  • /mnt—-方便用戶臨時掛載別的文件系統的,如將光驅掛載在/mnt/上,進入該目錄就可以查看光驅里的內容

  • media—-自動識別一些設備掛載到這個目錄下,例如U盤、光驅等等。

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

  • /proc—-操作系統運行時,進程及內核信息(比如CPU、硬盤分區(qū)、內存信息等)存放在這里。它是系統內存的映射,存在在內存,通過直接訪問這個目錄來獲取系統信息。

  • /root—-超級權限用戶的家目錄

  • /sbin—-超級權限用戶的可執(zhí)行命令存放目錄,普通用戶無權限執(zhí)行這個目錄下的命令

  • /tmp—–存放臨時文件。

  • /usr—–系統應用程序和文件(如命令、幫助文件)存放程序的目錄,類似于windows下的program files目錄。

  • /var—–經常被修改的目錄放在這個目錄下,如日志文件

  • /sys—-內核設備樹的一個直觀反映。當一個內核對象被創(chuàng)建的時候,對應的文件和目錄也在內核對象子系統中被創(chuàng)建。

  • /initrd—若在啟動過程中使用了initrd 映像作為臨時根文件系統,則在執(zhí)行完其上的/linuxrc掛接真正的根文件系統后,原來的初始RAM文件系統被映射到/initrd目錄。

?

Linux文件系統與設備驅動

相關推薦:

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

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

?

?

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享