linux檔案程式設計 蘇嵌實訓第11天

2021-06-07 18:11:35 字數 2071 閱讀 5194

一.linux系統呼叫及使用者程式設計介面(api)

1. 系統呼叫

作業系統提供給使用者的一組「特殊介面」,使用者可以通過該介面獲得作業系統核心題供服務。

執行空間分為核心空間和使用者空間(核心態和使用者態)。分類目的;保護核心空間。它們執行在不同級別上,在邏輯上是相互隔離的。因此使用者程序在通常情況下不允許訪問核心資料,也無法使用核心函式,它們只能在使用者空間操作使用者資料,呼叫使用者空間的函式。

2.使用者程式設計介面(api)

是實現系統呼叫與程式設計師進行互動的中間橋梁。

3.系統命令

比api更高一層,內部引用了api來實現相應的功能。

以上幾個的關係:

二.linux中檔案及檔案描述符

「一切皆為檔案」,在linux中對目錄和裝置的操作都等同於對檔案的操作。

檔案描述符是乙個非負的整數,它是乙個索引值,指向核心中每個程序的記錄表中。

1.系統呼叫建立:

int creat(const char *filename,mode_t mode)

filename:建立的檔名(包含路徑,預設為當前路徑)

mode:建立模式

2.常見的建立模式:

s_irusr       可讀        4

s_iwusr      可寫        2 

s_ixusr       可執行     1

s_ixrwu     可讀、可寫 、可執行  7

例如:#include

#include

#include

#include

#include

void create__file(char *filename)

else

}int main(int argc,char *argv[ ])

for(i=1;i

exit(exit_success);

}3.系統呼叫開啟

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

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

返回值:成功返回新分配的檔案描述符,出錯返回-1並設定errno。

引數含義:pathname是要開啟或建立的檔案的名字。

flags引數可用來說明此函式的多個選擇項。

mode對於open函式而言,僅當建立新檔案時使用第三個引數。

4.系統呼叫讀

int read(int fd,const void *buf,size_t length)

從檔案描述符fd所指定的檔案中讀取length個位元組到buf所指向的緩衝區中,返回值為實際讀取的位元組數。

5.系統呼叫寫

int write(int fd ,const void *buf ,size_t length )

把length個位元組從buf指向的緩衝區中寫到檔案描述符所指向的檔案中,返回值為

實際寫入的位元組數。

6.系統呼叫定位

int lseek(int fd ,offset_t offset ,int whence )

將檔案讀寫指標相對whence移動offset個位元組。操作成功時,返回檔案 指標相對於檔案頭的位置。

whence可使用下述值:

seek_set:相對檔案開頭

seet_cur:相對檔案讀寫指標的當前位置

seet_end:相對檔案末尾

offset可去負值,表示向前移動。

例子:lseek(fd,0,seet_end);這是計算檔案長度的函式。

注:庫函式的建立、開啟、讀寫,很多地方有相似之處。

蘇嵌實訓1

日期 2018年10月8日 班級 15電信單招班 姓名 劉鑫 學號 15090734 本人進度計畫以及任務 學習c語言指標知識。本日任務完成情況 完成了嵌入式開發環境的搭建 學習了c語言相關知識。本日開發中出現的問題彙總 本人覺得自己在c語言方面還有所欠缺,掌握不夠牢固,還需加強對部分知識點的理解和...

蘇嵌 專案實訓

蘇嵌專案實戰 學習日誌 姓名 楊星月 日期 20180904 今日學習任務 學習如何定義乙個結構體變數。學會自定義標頭檔案。理解棧的用法,編寫進棧,出棧和讀取棧中元素的程式。今日任務完成情況 學會了如何定義乙個結構體變數。編寫了棧的相關函式 編寫了初始化棧的函式 編寫了程式來判斷乙個棧是否為空 編寫...

蘇嵌實訓3

蘇嵌 專案實戰 學習日誌 姓名 劉琪耘 日期 2018 9 5 今日學習任務 學習c語言中佇列的知識,包括對頭,隊尾,先進先出,鏈式結構 今日任務完成情況 基本完成老師講的程式 main.c include include queue.h include int main else if ret s...