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 的路徑 顯示連線源的路...