系统级程序设计第一课内容——Linux系统与操作 2022.5.2
系統級程序設計第一課內容——Linux系統與操作
文章目錄
- 系統級程序設計第一課內容——Linux系統與操作
- 一、Linux文件系統與操作
- 二、文件操作
- 1.主要函數
- 2.open()
- 3.read()
- 4.write()
- 5.lseek()
- 6.close()
- 完整操作代碼
- 課堂總結
`提示:該文章主要參考老師課程所用內容
一、Linux文件系統與操作
文件是由創建者定義的,具有文件名的一組相關元素的集合,文件可以是文本文檔、圖片、程序等。Linux上的文件操作,更接近于底層的文件操作。系統級程序設計也是內核級程序設計。
二、文件操作
1.主要函數
open() read() write() lseek() close()2.open()
int open(const char *pathname, int flags[, mode_t mode);常見的訪問模式
– O_RDONLY:只讀
– O_WRONLY: 只寫
– O_RDWR: 讀寫
– O_CREAT: 創建一個文件并打開
– O_EXCL: 測試文件是否存在,不存在則創建
– O_TRUNC: 以只寫或讀寫方式成功打開文件時,將文件長度截斷為0
– O_APPEND: 以追加方式打開文件
只有第二個參數flags = O_CREAT,第三個參數才會被用于設置新文件的權限,取值如下:
S_IRWXU: 文件所有者,讀、寫、執行
S_IRUSR: 文件所有者,讀
S_IWUSR: 文件所有者,寫
S_IXUSR: 文件所有者,執行
S_IRWXG: 文件所屬組,讀、寫、執行
S_IRGRP: 文件所屬組,讀
S_IWGRP: 文件所屬組,寫
S_IXGRP: 文件所屬組,執行
S_IRWXO: 其他人,讀、寫、執行
S_IROTH: 其他人,讀
S_IWOTH: 其他人,寫
S_IXOTH: 其他人,執行
3.read()
size_t read(int fd, void *buf, size_t count);參數說明:
fd: 從open或create函數返回的文件描述符
buf: 緩沖區
count: 讀取數據的字節數
返回值說明:
ssize_t: 有符號的size_t,有三種返回值
– 正數:請求讀取的字節數
– 0: 文件長度有限,若讀寫位置距文件末尾只有20字節,該函數請求讀取30字節,則第一次讀取時返回值為20,第二次讀取時,返回0
– -1: 讀取文件出錯
4.write()
ssize_t write(int fd, void *buf, size_t count);參數說明:
參數使用基本與read函數相同
返回值說明:
返回寫入的字節數或者-1并設置errno
5.lseek()
ssize_t write(int fd, off_t offset, int whence);參數說明:
fd: 從open或create函數返回的文件描述符
offset: 對文件偏移量的設置,參數可正可負
whence: 控制設置當前文件偏移量的方法
– whence = SEEK_SET: 文件偏移量被設置為offset
– whence = SEEK_CUR: 文件偏移量被設置為當前偏移量+offset
– whence = SEEK_END: 文件偏移量被設置為文件長度+offset
返回值說明:
設置成功:返回新的偏移量
不成功:-1
6.close()
int close(int fd);返回值說明:
設置成功:返回0
不成功:-1
完整操作代碼
提示:對以上函數進行整合操作
主要內容為打開文件寫入數據后關閉,重新打開后讀取剛剛寫入的文件。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <string.h> int main(){int tempFd = 0;char tempFileName[20] = "test.txt";//Step 1. open the file.tempFd = open(tempFileName, O_RDWR|O_EXCL|O_TRUNC, S_IRWXG);if(tempFd == -1){perror("file open error.\n");exit(-1);}//of if//Step 2. write the data.int tempLen = 0;char tempBuf[100] = {0};scanf("%s", tempBuf);tempLen = strlen(tempBuf);write(tempFd, tempBuf, tempLen);close(tempFd);//Step 3. read the filetempFd = open(tempFileName, O_RDONLY);if(tempFd == -1){perror("file open error.\n");exit(-1);}//of ifoff_t tempFileSize = 0;tempFileSize = lseek(tempFd, 0, SEEK_END);lseek(tempFd, 0, SEEK_SET);while(lseek(tempFd, 0, SEEK_CUT)!= tempFileSize){read(tempFd, tempBuf, 1024);printf("%s\n", tempBuf);}//of whileclose(tempFd);return 0; }//of main課堂總結
本次課主要對Linux文件系統的基本操作進行了總結,第一次接觸內核級編程,雖然使用較熟悉的語言,但內核級編程還是有些難度,同時本課程要求對Linux操作系統的的基本操作非常熟練,還是要多加聯系,來提高對Linux 系統操作的熟練度。
參考文章:https://blog.csdn.net/search_129_hr/article/details/124454969
總結
以上是生活随笔為你收集整理的系统级程序设计第一课内容——Linux系统与操作 2022.5.2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Node.js -- JavaScrip
- 下一篇: linux重新mac,用 Linux 让