1. 程式人生 > >【嵌入式Linux C程式設計】linux檔案程式設計

【嵌入式Linux C程式設計】linux檔案程式設計

系統呼叫是作業系統提供給使用者的一組“特殊”介面,使用者程式可以通過這些介面來獲得核心提供的服務。

使用者程式為什麼不可以直接呼叫核心?系統呼叫可以保護核心

使用者程式在使用者空間中操作使用者資料,不允許訪問核心空間資料,也無法呼叫核心函式。

使用者程式設計介面API在使用者空間中,連線了使用者空間的系統命令和核心空間的系統呼叫

Linux檔案可分為:普通檔案,目錄檔案,連結檔案,裝置檔案。

不帶快取的I/O操作

open函式是用於開啟或建立檔案,在開啟或建立檔案時可以指定檔案的屬性及使用者的許可權等各種引數。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags); 
int open(const char *pathname, int flags, mode_t mode); 

pathname是要開啟或者建立的檔名;flag是開啟或建立檔案的方式;mode引數只在建立時需要。

open函式執行成功,返回新分配的檔案描述符;失敗則返回-1並設定error。

開啟方式有:

 O_RDONLY   只讀開啟

 O_WRONLY   只寫開啟

 O_RDWR     讀、寫開啟(一般使用這種方式)

int fd;//定義一個變量表示檔案描述符
fd = open("hello.txt", O_RDWR | O_CREAT, S_IRWXU);//以可讀寫方式建立一個名為“hello.txt”的檔案,檔案建立者具有RWX(可寫可讀可執行)許可權。
write函式
int write(int fd, const void * buf,  size_t length)
//把length個位元組從buf指向的緩衝區中寫到檔案描述符fd所指向的檔案中,返回值為實際寫入的位元組數

read函式

int read(int fd, const void *buf, size_t   length);
//從檔案描述符fd所指定的檔案中讀取length個位元組到buf所指向的緩衝區中,返回值為實際讀取的位元組數

lseek函式

int lseek(int fd, offset_t offset,  int whence);//將檔案讀寫指標相對whence移動offset個位元組。操作成功時,返回檔案指標相對於檔案頭的位置

whence引數有三個選項:SEEK_SET 初始位置在頭部; SEEK_CUR 初始位置在當前位置; SEEK_END 初始位置在檔案末尾

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

帶快取的I/O流操作(庫函式)

三種快取模式:全快取; 行快取; 無快取。

fopen函式

FILE *fopen(const char *filename, const char *mode)

filename:開啟的檔名(包含路徑,預設為當前路徑) ;mode : 開啟模式;

mode有:r——只讀方式開啟,檔案必須已存在;w——只寫方式開啟,檔案不存在則建立;若已存在,則清空重寫;a——只能在檔案末尾追加資料,檔案不存在則建立;r+——讀寫方式開啟,檔案必須已存在;w+——讀寫方式開啟,檔案不存在則建立;若已存在,則清空重寫;a+——讀和追加方式開啟,檔案不存在則建立。

fclose函式

int fclose(FILE * stream);

用來關閉之前fopen開啟的檔案。此動作會讓緩衝區內的資料寫入檔案中,並釋放系統所提供的檔案資源。

fread函式

size_t fread(void * ptr, size_t size, size_t nmemb,  FILE * stream)

ptr為讀入資料的存放地址(讀取到這裡);size表示一次讀取多少個位元組數; nmemb表示一共要讀取多少個size位元組數的資料;stream是被讀取的已開啟的檔案指標(從該檔案中讀)。其返回值是讀取到的位元組數。

fwrite函式

size_t fwrite(const void * ptr, size_t  size, size_t  nmemb,  FILE * stream)

ptr為欲寫入資料的地址(資料來源);size表示一次寫入多少位元組數;nmemb表示一共要寫入多少個size位元組數的資料;stream表示被開啟的檔案指標(寫向該檔案)。其返回值是寫入的位元組數。

相關推薦

C語言檔案程式設計

1、多檔案程式設計,一個檔案可以有多個函式,但是一個函式最多一個檔案 2、多檔案程式設計的步驟: • 把所有函式分散在多個檔案中,通常主函式在單獨的檔案裡 • 為每個原始檔編寫一個配對的以.h作為副檔名的標頭檔案,主函式所在的不需要,不分配記

嵌入式Linux C程式設計linux檔案程式設計

系統呼叫是作業系統提供給使用者的一組“特殊”介面,使用者程式可以通過這些介面來獲得核心提供的服務。使用者程式為什麼不可以直接呼叫核心?系統呼叫可以保護核心。使用者程式在使用者空間中操作使用者資料,不允許訪問核心空間資料,也無法呼叫核心函式。使用者程式設計介面API在使用者空間

嵌入式Linux C程式設計Linux多執行緒程式設計

程序——資源分配的最小單位,執行緒——程式執行的最小單位。執行緒是程序的一個執行流,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位。一個程序由幾個執行緒組成(擁有很多相對獨立的執行流的使用者程式共享應用程式的大部分資料結構),執行緒與同屬一個程序的其他的執

嵌入式Linux C程式設計Linux程序控制程式設計

程序是一個具有一定獨立功能的程式的一次執行活動,同時也是資源分配的最小單元。程序的生命週期:        建立:每個程序可以由父程序建立,程序可以建立子程序,子程序可以建立孫程序。        執行:多個程序可以同時存在,程序間可以通訊。        撤銷:程序可以撤銷

嵌入式Linux C程式設計Linux程序間通訊——IPC

程序間通訊的作用:資料傳輸; 資源共享; 通知事件; 程序控制。管道通訊管道是單向的,先進先出(FIFO)。將一個程序的輸出和另一個程序的輸入連在一起。輸出程序在管道尾部寫入資料,輸入程序在管道頭部接受資料。資料在被讀出後,將從管道中清楚,其他程序再也無法讀取到該資料。程序試

Linux 網路程式設計TCP網路程式設計中connect()、listen()和accept()三者之間的關係

基於 TCP 的網路程式設計開發分為伺服器端和客戶端兩部分,常見的核心步驟和流程如下: connect()函式:對於客戶端的 connect() 函式,該函式的功能為客戶端主動連線伺服器,建立連線是通過三次握手,而這個連接的過程是由核心完成,不是這個函式完成的,這個函式的作用僅僅是通知 Linux 核心

Linux學習筆記獲取檔案屬性 — stat()、fstat()、lstat()小結

相關文章 Linux是基於檔案的作業系統,一切皆檔案。下面就詳細的整理一下關於Linux檔案屬性的內容。 一、檔案屬性函式 系統提供了3個獲取檔案屬性的函式,分別是:stat()、fstat()、lstat()。 1、函式原型   標頭檔案包含:

程式碼參考網上的linux串列埠程式設計學習筆記

1.串列埠通訊:同步通訊:將很多字元組成一個資訊組進行傳送非同步通訊:一個字元一符的傳送。(可靠性高,但是效率相對降低) 2.通過echo和cat來測試串列埠通訊 echo “Hello” >/dev/ttyS0   cat /dev/ttyS1 3.直接通過read

安全牛學習筆記Linux緩沖區溢出

信息安全;security+;Linux緩沖區溢出FUZZING Crossfire 1.9.0版本接受入展socket連接時攢在緩沖區溢出漏洞 調試工具 edb運行平臺Kali i486虛擬機 [email protected]:~

正則表達式linux中符號 及 正則表達式

lin int echo 字符 linux中 pri style pre 匹配 【符號】 # 換行 \n echo -e "yy\nwy" yy wy 【正則表達式】 cat test.txt yy1%yy2,yy3,yy4%yy5 # [,%

linux操作系統linux查看有哪些用戶

http 分享圖片 lin img /etc/ gpo word ima clas linux系統如何查看有哪些用戶? 命令:cat /etc/passwd(不是password) 【linux操作系統】linux查看有哪些用戶

Linux學習筆記 Linux軟件包安裝和卸載

linux centos RPM yum 源碼包 7.1安裝軟件包的三種方法rpm工具:類似於windows下的exe文件。yum工具:支持自動安裝依賴包。相當於app store。源碼包:編程語言的各種文件都能看到,需要編碼器編譯再安裝。 7.2rpm包介紹掛載光盤,屏幕右下角光盤。m

軟體素材---linux C語言:linux下獲取可執行檔案的絕對路徑--getcwd函式

      //標頭檔案:#include <unistd.h>     //定義函式:char * getcwd(char * buf, size_t size);    

軟體素材---linux C語言:向檔案末尾進行追加資料

void AppendDataToFile(char* filePath, char* msg) { // 以附加方式開啟可讀/寫的檔案, 如果沒有此檔案則會進行建立,然後以附加方式開啟可讀/寫的檔案 FILE* fp = fopen(filePath, "a+");

Python程式設計PDF檔案讀寫demo (mark)

# pdf_demo.py # coding: utf-8 # de8ug # 需要提前安裝:pip install reportlab from reportlab.lib.pagesizes import A4 from reportlab.pdfgen import canvas

Linux C的可執行檔案結構以及程序結構

(公共部分):程式碼區,BSS區,資料區. 1.程式碼區:存放可執行的指令.順便規劃局部變數的相關資訊(??).   獨有性:一份指令在記憶體(不管虛擬記憶體還是實際)中只要有一份就可以的   只讀性:彙編指令包含 操作碼+運算元;一般操作碼是不可變的,但是運算元可

Linux C學習筆記——txt檔案讀寫

  /*************** perror(s) 用來將上一個函式發生錯誤的原因輸出到標準裝置(stderr)。引數 s 所指的字串會先打印出,後面再加上錯誤原因字串。此錯誤原因依照全域性變數errno的值來決定要輸出的字串。 FILE * fopen(const c

移動開發與培訓Linux管理_Linux開發

1024超級勳章 授予原創文章總數達

Linux C基於TCP的網路程式設計(三次握手)

網路通訊(TCP) TCP(面向連線的通訊協議):在通訊中時刻保持連線,這種通訊方式類似於打電話,能保證安全可靠資料不丟失,但是與UDP相比傳輸速度較低。 TCP和UDP通訊收發函式區別:記住socket中是否存放有IP 和埠資訊,TCP有,UDP無。同時T

Linux C基於UDP的網路程式設計

套接字(socket) socket是一種可以進行網路通訊的核心物件,它有一個唯一的識別符號,一般稱它為socket描述符——sockfd,可類比於檔案描述符fd,基於Linux下一切皆檔案的概念,所以sockfd也可以用read/write/close操作。