window和linux下檔案操作總結

2021-07-30 07:15:15 字數 3506 閱讀 6443

以前做了個window移植到linux中,涉及到了兩種系統之間檔案,執行緒,時間等內容的差異,今天就針對兩種系統的檔案操作進行總結;

檔案操作是程式設計師最基本的需要掌握的知識,雖然知道一些,但是通過本編文章更深刻的進行掌握。

首先來看看linux下的檔案操作,都是可以通過man函式進行檢視,今天把基本的操作列出來

1、我們都知道在linux下,一切都是檔案,檔案操作進而可以分為兩類:系統呼叫和庫函式

在linux下檔案操作無非是open,close,read,write,lseek,通過這幾個函式就可以實現對檔案的讀寫等操作。

1.1 檔案描述符

在進行檔案操作的時候需要乙個檔案標識進行讀寫操作,這個標示就是檔案描述符,也可以說是檔案id。乙個檔案id在系統中唯一標識乙個檔案。

在系統開始啟動的時候,就開啟了三個檔案描述符

0 ----標準輸入

1 ----標準輸出

2 ----標準錯誤

1.2 open函式

open顧名思義就是開啟乙個檔案,並返回檔案的描述符

在linux下終端內,直接man open就可以找到open的規範描述,在描述中有兩個介紹:

#include

#include

#include

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

前面是open函式呼叫應該具有的標頭檔案

引數說明:

path:準備開啟的檔案或裝置名字;

flags:開啟檔案的訪問模式;

訪問模式可以是o_rdonly 唯讀, o_wronly 只寫, o_rdwr 可讀可寫;

mode:就是當使用 o_creat時,建立的檔案所具有的許可權;

s_irusr:讀許可權,檔案所有者

s_iwuser:寫許可權,檔案所有者

。。。為了方便,這些檔案許可權可以通過數字進行配置,和chmod賦予許可權的型別相同。

open呼叫成功返回0,失敗返回-1. 如:

open("my.file", o_rdwd|o_creat, 0666);

賦予檔案my.file所有者,所有組,其他可讀可寫許可權。

乙個小例子:

進行編譯,執行發現my.file的許可權不對

這是什麼原因呢?

以為系統有預設的許可權,這是umask在搞怪。

當我們登入系統之後建立乙個檔案總是有乙個預設

許可權的,那麼這個許可權是怎麼來的呢?這就是umask幹的事情。umask設定了使用者

建立檔案的預設 許可權,它與chmod的效果剛好相反,umask設定的是許可權「

補碼」,而chmod設定的是檔案許可權碼。

umask是乙個函式,我們可以在**中新增umask(0000),進行設定下,就可以了,我們試一下看看

加上了,果然沒有問題了,你們也可以試試

1.3 close函式

這個函式很簡單,先看看man close

#include

int close(int fd);

close成功返回0, 失敗返回-1

1.4 write函式

write將緩衝區中的資料寫入檔案,函式原型是:

ssize_t write(int fd, void *buf, size_t count);

引數說明:

fd:檔案描述符;

buf:待寫入的檔案指標;

count:寫入的位元組數。

返回值:

返回成功寫入的字元數,錯誤返回-1

1.5 read函式

#include

ssize_t read(int fd, void *buf, size_t count);

引數和上面的write對應,這裡就不寫了。

返回值:返回成功讀取的字元數。

小例子:

1.6 lseek函式

lseek針對檔案的偏移。

#include

#include

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

引數:fd:檔案描述符;

offset:針對檔案的偏移,是根據whence的偏移,可正可負;

whence:檔案便宜的開始位置;

seek_set:檔案開始位置

seek_cur:檔案當前位置

seek_end:檔案結尾

返回:成功返回檔案的偏移,失敗返回-1.

我們直接可以採用lseek,獲取檔案的長度:

int file_len = lseek(fd, 0, seek_end);

2.window下的檔案操作

簡單介紹下window下的檔案操作,這裡面涉及內容很多

2.1 fopen函式

#include

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

path:檔案的路徑;

mode:開啟的流模式。

r:唯讀;

w:只寫;

r+:更新方式讀寫開啟;

w+:更新方式讀寫開啟,並把檔案長度截斷為0;

a+:更新方式開啟,並將內容追加在檔案尾。

2.2 fwrite

size_t fwrite(const void *buf, size_t size, size_t count, file* stream);

buf:資料的指標;

size:寫入的內容的單位元組數;

count:寫入位元組資料項的個數;

stream:寫入為檔案流指標。

返回值:寫入的資料項的個數

實際就是寫入了count * size的大小內容

2.3 fread

size_t fread(const void *buf , size_t size, size_t count, file *stream);

這個和fwrite對應。

2.4 fclose

fclose(file *stream);

2.5 fseek

fseek是lseek系統呼叫對應的檔案流函式。

int fseek(file *stream, long offset, int fromwhere);

這個和lseek相對應,就不詳細說了。

例子就不弄了,關於這方面的內容很多,相信你們早已理解,這太簡單了。

window下檔案操作命令 dir

1 a 顯示具有指定屬性的檔案。2 b 使用空格式 沒有標題資訊或摘要 3 c 在檔案大小中顯示千位數分隔符。這是預設值。用 c 來禁用分隔符顯示。4 d 跟寬式相同,但檔案是按欄分類列出的。5 l 用小寫。6 n 新的長列 式,其中檔名在最右邊。7 o 後面跟乙個字母來用分類順序列出檔案。所跟字母...

讓Python刪除window下檔案

今天接到 有樓下客戶反映,資料有問題,我連線到伺服器上,發現broke的乙個碟符空間滿了,導致,應用在報錯,停下服務,刪除了龐大的日誌檔案,服務開啟,一切正常了。早就想寫個指令碼放在伺服器上,今天正好有空,於是扒拉了一下,寫了個python的小指令碼,大牛就不用看了,原理是找出每個檔案的修改時間,如...

Linux 下檔案打包和壓縮

在 windows 下我們通常會用好壓或者是 winrar 來進行壓縮檔案,一般沒有打包的說法。在 linux 下卻不太一樣,我們可以利用一些命令完成對檔案的打包和壓縮。這篇文章介紹 tar gzip,zcat,bzip2,bunzip2 首先,我來先介紹下最為重要的命令 tar 它有這樣的幾個引數...