Linux中常見的檔案操作函式

2021-09-25 18:14:03 字數 3089 閱讀 4400

c語言中常用的檔案操作函式有fopen(),fread(),fwrite(),fclose(),fseek(),這些函式稱為庫函式。

linux中常用的檔案操作函式有open(),read(),write(),close(),seek(),stat(),這些函式稱為系統呼叫函式。

系統呼叫函式:系統呼叫函式是作業系統為核心**提供給使用者或上層使用的一些函式介面,呼叫在使用者態,執行在核心態。

庫函式:庫函式是把一些常用的函式編寫完放到乙個檔案裡,供不同的人進行呼叫,庫函式在使用者態呼叫,在使用者態實現,但是有些庫函式需要轉調系統呼叫函式,若庫函式需要底層支援,就需要呼叫系統呼叫函式,若庫函式不需要底層支援,就不需要呼叫系統呼叫函式。

例如使用printf(),scanf(),這兩個函式乙個是從介面獲取資料,乙個是將資料列印到介面上,這兩個操作都需要底層的支援,那麼就需要經過作業系統,呼叫系統呼叫函式;例如使用strlen(),strcpy(),這兩個操作不需要底層的支援,所以不會呼叫系統呼叫函式。

下面來看幾個常用的檔案操作函式:

(1)open函式

呼叫open函式可以開啟或建立乙個檔案

#include

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

返回值:若成功返回檔案描述符,若失敗返回-1

呼叫read函式可以從開啟的檔案中讀資料

#include

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

返回值:若成功返回讀取到的位元組數,若已到檔案結尾則返回0,若失敗返回-1 

fd:讀取的檔案的檔案描述符,由open函式的返回值指定;

buf:讀取的資料儲存的起始位置;

size:一次最多讀取的位元組個數,size <= 緩衝區的大小;

(3)write函式

呼叫write函式可以向開啟的檔案寫資料

#include

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

返回值:若成功返回已經寫入的資料的位元組數,若失敗返回-1

fd:將資料寫入的檔案的檔案描述符,由open函式的返回值指定;

buf:寫入的資料的起始位置;

size:寫入資料的位元組數;

(4)close函式

呼叫close函式可以關閉乙個開啟的檔案描述符

#include

ssize_t close(int fd);

返回值:若成功返回0,如失敗返回-1

(5)lseek函式呼叫lseek函式可以顯式地為乙個開啟的檔案設定其偏移量

#include

int lseek(int fd,int offset,int flag);

返回值:若成功返回新的檔案偏移量,若失敗返回-1 

fd:操作的檔案的的檔案描述符;

offset:偏移量

flag:移動標記,有以下幾種:

seek_set:將該檔案的偏移量設定為距檔案開始處offset個位元組;

seek_cur:將該檔案的偏移量設定為當前值加offset個位元組;

seek_end:將該檔案的偏移量設定為檔案長度offset個位元組;

(6)stat、fstat、lstat函式

這三個函式都是獲取檔案的屬性資訊

#include

int stat(const char *restrict pathname,struct stat *restrict buf);

int fstat(int fd,struct stat *buff);

int lstat(const char *restrict pathname,struct stat *restrict buf);

三個函式的返回值:若成功返回0,若失敗返回-1

stat函式返回與此命名檔案pathname有關的資訊結構,fstat函式獲取已在檔案描述符fd上開啟的檔案的有關資訊,lstat函式類似與stat函式,但是當命名檔案pathname是乙個符號鏈結時,lstat返回該符號鏈結的有關資訊,而不是由該符號鏈結引用的有關資訊;buff用於存放檔案資訊,buff指向stat結構體。

struct

;

使用stat函式最多的可能是ls,-l命令,用其可以獲得有關乙個檔案的所有資訊。

練習:將「hello world」寫到檔案a.text,並將其讀出

#include #include #include #include #include #include int main()

; lseek(fd,0,seek_set);

read(fd,readbuff,127);

printf("readbuff: %s\n",readbuff);

close(fd);

}

以open函式為例來看怎麼從使用者態切換到核心態

使用者態呼叫open函式函式時,會做三件事:1、觸發0x80中斷;  2、儲存程式上下文,即當前程式的執行狀態; 3、將函式對應的系統呼叫號儲存到eax暫存器中;      

系統呼叫函式觸發0x80中斷,並且將系統呼叫號5儲存在eax暫存器中,然後進入核心,核心開始執行中斷處理程式,在系統呼叫表中查詢系統呼叫號對應的系統核心函式sys_open()並且呼叫,執行完成後又將返回值通過eax暫存器傳遞歸使用者空間。

Oracle中常見的操作

1.建立oracle表空間 2.刪除oracle表空間 示例 drop tablespace my space including contents and datafiles 3.檢視當前所有的表空間和表空間對應的資料檔案的位置 select from dba tablespaces 檢視當前所有...

Python中常見的檔案物件內建函式

檔案物件內建方法列表 檔案物件的方法 操作 file.close 關閉檔案 file.fileno 返回檔案的描述符 file descriptor,fd,整數值 file.flush 重新整理檔案的內部緩衝區 file.isatty 判斷file是否是乙個類設tty備 file.next 返回檔案...

random 函式中常見的函式

usr bin python coding utf 8 import random print random.randint 1,10 產生 1 到 10 的乙個整數型隨機數 print random.random 產生 0 到 1 之間的隨機浮點數 print random.uniform 1.1...