LINUX中檔案描述

2021-08-07 23:26:01 字數 2779 閱讀 1688

對於linux作業系統來說,它是以檔案為基礎而設計的,即一切操作皆檔案。linux的檔案子系統主要用於管理檔案儲存空間的分配、檔案訪問許可權的維護、對檔案的各種操作。

檔案主要包含兩方面的內容:一是檔案本身所包含的資料;另一是檔案的屬性,也稱元資料,包括檔案的訪問許可權、所有者、檔案大小、建立日期等。

**檔案系統**是由一系列塊(block)構成的,每個塊的大小因不同的檔案系統而不同,但是乙個檔案系統一旦安裝之後,塊的大小就固定了。

對於核心而言,所有的開啟檔案都由檔案描述符表示。**檔案描述符**是乙個非負整數。在讀寫乙個檔案前,需要先呼叫open或create函式開啟檔案,成功執行這兩個上都將返回 乙個檔案描述符。檔案描述符的取值範圍0~nr_open(255)之間,也就是說每個程式最多只能開啟256個檔案。

檔案描述符 0 標準輸入檔案,即鍵盤

1 標準輸出檔案,即顯示器

2 標準錯誤輸出,一般也是指顯示器

一、檔案的分類

1. 普通檔案(regular file);

2. 目錄檔案(directory file):其內容是該目錄下的檔案和子目錄的資訊

3. 字元特殊檔案(character special file):用於表示系統中字元型別的裝置,比如鍵盤、滑鼠等,這些硬體對作業系統來說只是乙個檔案

4. 塊特殊檔案(block special file):用於表示系統中塊型別的裝置,如硬碟、光碟機等,一次至少讀乙個塊

5. fifo:命名管道用於程序間的通訊

6. 套接字(socket):用於網路通訊

7. 符號連線(symbolic link):指向另乙個檔案,是另一檔案的引用

#include

#include

int fd=open("b.txt",o_rdwr|o_creat|o_excl,0664);

if(-1==fd)

perror("open error");

exit(-1);

2. creat():檔案的建立

creat(const char *pathname,mode_t mode);如果pathname所指向的檔案不存在則重新建立,若存在則原檔案被新 檔案覆蓋

3.close(fd):關閉乙個已開啟的檔案。

呼叫成功時,返回值為0,否則返回-1

注意:close函式呼叫成功並不保證資料能全部寫回硬碟

4. size_t read(int fd,void *buf,size_t count)

從檔案描述符fd所指向的檔案中讀取count個位元組的資料到buf所指向的快取中。返回值表示實際讀取到的位元組數。

#include 

#include

int res=read(fd,buf,6);

if(-1==fd)

perror("read"),exit(-1);

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

將buf所指向的count個位元組資料寫入到由檔案描述符fd所指向的檔案中。

如果呼叫成功則返回寫入的位元組數

#include 

#include

int res=write(fd,"hello",sizeof("hello"));

if(-1==res)

perror("write"),exit(-1);

三、檔案讀寫指標的移動

off_t lseek(int fildes,off_t offset,int whence);用來移動檔案讀寫指標的位置

引數fildes為已開啟的 檔案描述符,offset為根據引數whence來移動讀寫位置是的位移數

whence的取值 seek_set (0) 從檔案開始處計算偏移量

seek-cur (1) 從檔案指標當前位置開始計算偏移量

seek_end(2) 從檔案結尾處開始計算偏移量

(offset允許取負值)

#include

#include

int len=lseek(fd,-3,seek_set);

if(-1==len){

perror("lseek"),exit(-1);

四、檔案屬性的操作

1. 檢視檔案屬性,在shell下可通過輸入命令 ls -l 來檢視

2. 獲取檔案屬性,除了ls還可以通過函式stat()/fstat()/lstat()函式來檢視

3. 設定檔案屬性

hmod/dchmod 用來修改檔案的訪問許可權

chown/fchown/lchown 修改檔案的使用者id和組id

truncatr/ftruncate 改變檔案的大小

utime 改變檔案的st_mtime域和st_ctime域,即訪問時間和修改時間

umask 設定檔案建立時使用的遮蔽字

五、檔案的移動和刪除

1. int rename(const char* olspath,const char *newpath);

rename會將引數oldpath所指定的檔名稱改為newpath所指定的檔名稱

2. int unlink(const char *pathname) 刪除

int remove(const char *pathname)

注意:目錄檔案的刪除要使用rmdir系統呼叫

不清楚的函式可以找man那個男人幫忙哦!

linux中檔案描述符

在linux系統中,所有東西都可以看成是檔案,檔案又可以分為普通檔案,目錄檔案,鏈結檔案和裝置檔案。檔案描述符是核心為了高效管理已被開啟的檔案所建立的索引,是乙個非負整數用於指代被開啟的檔案,所有執行i o操作的系統呼叫都是通過檔案描述符。程式剛剛啟動的時候,0是標準輸入,1是標準輸出,2是錯誤輸出...

linux中檔案描述符fd和檔案指標flip的理解

簡單歸納 fd只是乙個整數,在open時產生。起到乙個索引的作用,程序通過pcb中的檔案描述符表找到該fd所指向的檔案指標filp。檔案描述符的操作 如 open 返回的是乙個檔案描述符,核心會在每個程序空間中維護乙個檔案描述符表,所有開啟的檔案都將通過此表中的檔案描述符來引用 而流 如 fopen...

linux中檔案描述符fd和檔案指標flip的理解

linux中檔案描述符fd和檔案指標flip的理解 簡單歸納 fd只是乙個整數,在open時產生。起到乙個索引的作用,程序通過pcb中的檔案描述符表找到該fd所指向的檔案指標filp。檔案描述符的操作 如 open 返回的是乙個檔案描述符,核心會在每個程序空間中維護乙個檔案描述符表,所有開啟的檔案都...