linux檔案操作

2021-06-19 17:42:26 字數 1931 閱讀 8968

unix檔案操作(讀寫操作)

標c檔案讀寫 - file* 代表乙個開啟的檔案

unix/linux的檔案讀寫函式

linux系統中 幾乎一切都是檔案,記憶體、目錄、硬體裝置都可以看成檔案。比如:

記憶體 對應目錄 /proc/pid/

目錄 可以用 vi 檢視,也是檔案

裝置: /dev/tty - 鍵盤、顯示器

/dev/null - 空裝置,清空

因此,讀寫檔案函式其實可以讀寫很多裝置,函式包括:

open() - 新建/開啟乙個檔案

read() - 讀乙個開啟的檔案/裝置

write() - 寫乙個開啟的檔案/裝置

close() - 關閉乙個開啟的檔案

ioctl() - 其他的一些控制功能

前面4個函式 是標c函式在unix/linux系統中 底層的支援(系統呼叫)。

int open(char* filename,

int flags,...)

...代表0-n個任意型別的引數(可變長引數)

只有新建檔案時,需要給出第三個引數,做新檔案的許可權。

flags是open的標誌,主要包括:

o_rdonly o_wronly o_rdwr : 三者必選其一,代表訪問許可權。檔案在硬碟上有檔案許可權,在開啟時有訪問許可權,訪問許可權 小於等於 檔案許可權。

o_creat : 代表新建檔案,如果檔案已存在就開啟,有兩個輔助項

o_excl : 只是新建檔案,如果檔案已存在,返回-1代表出錯。

o_trunc: 清空已有檔案的內容。

返回檔案描述符,出錯返回-1。

關於檔案描述符

unix/linux都是用乙個非負整數代表開啟的檔案,這個非負整數就是 檔案描述符。open()函式返回檔案描述符,這個檔案描述符對應一張 檔案表,資訊存在檔案表中。

每個程序都有一張檔案描述符的總表,在總表中存放已經使用的描述符以及描述符和檔案表的對應關係。當有新檔案開啟時,從總表中查詢 未使用的最小值返回即可。close()時會把描述符從總表中刪除,此時就可以再次使用。

檔案描述符從3開始,0、1、2被系統占用,當作 標準輸入、標準輸出和標準錯誤。

注:open()新建檔案時,檔案許可權可能被遮蔽。

讀寫函式:

int read(int fd,void* buf,size_t size)

引數 fd 就是檔案描述符,open()返回

buf就是資料儲存區的首位址,size是大小

返回值:

正數 - 實際讀到的位元組數

0 - 讀到檔案尾(讀完了)

-1 - 出錯了,可以使用perror()

int write(int fd,void* buf,size_t size)

引數fd就是檔案描述符,open()返回

buf是要寫的資料的首位址

size不是buf的全部,而是實際要寫入的位元組數

返回值:

正數 - 實際寫入的位元組數

0 - 什麼都沒寫

-1 - 出錯了,可以使用perror()

讀函式和寫函式最大的區別在於第三個引數,讀函式是buf的大小,而寫函式是實際要寫的位元組數。比如: char buf;

read(fd,buf,sizeof(buf));

write(fd,buf,strlen(buf));

vi編輯器如果用q退出,自動加上結束符,cat會換行。

emp.h

#ifndef _emp_h

#define _emp_h

typedef struct emp emp;

#endif

main.c

#include #include #include #include #include "emp.h"

int main()

linux 檔案操作

1 cat 開啟檔案 cat name.txt 開啟檔案name.txt cat 1.txt 2.txt 開啟2個檔案 cat n name.txt 開啟檔案後顯示行號 2 vi 輸出,刪除,查詢,替換,塊操作 等文字操作 vi 的三種基本工作模式 命令列模式,文字輸入模式,末行模式 命令列模式 不...

Linux 檔案操作

1,查詢檔案 find name 名稱 ls find atime 10 記著有乙個點號 兩邊都有空格,代表當前目錄,如果希望顯示系統的所有大於10天的檔案 可以將 換成 代表根目錄 find mtime n print n天前那天改過的檔案 find mtime n print n天以前改過的檔案...

Linux檔案操作

特殊目錄 代表此層目錄 代表上一層目錄 前乙個工作目錄 代表 當前使用者 所在的主目錄 account 代表 account 這個使用者的主目錄 下面我們來談談幾個常見的處理目錄的命令 cd 切換目錄 pwd p 顯示當前目錄 引數 p 顯示當前的路徑,而非使用連線 link 的路徑 顯示連線源的路...