系统级程序设计第一课内容——Linux系统与操作 2022.5.2
系統(tǒng)級程序設(shè)計第一課內(nèi)容——Linux系統(tǒng)與操作
文章目錄
- 系統(tǒng)級程序設(shè)計第一課內(nèi)容——Linux系統(tǒng)與操作
- 一、Linux文件系統(tǒng)與操作
- 二、文件操作
- 1.主要函數(shù)
- 2.open()
- 3.read()
- 4.write()
- 5.lseek()
- 6.close()
- 完整操作代碼
- 課堂總結(jié)
`提示:該文章主要參考老師課程所用內(nèi)容
一、Linux文件系統(tǒng)與操作
文件是由創(chuàng)建者定義的,具有文件名的一組相關(guān)元素的集合,文件可以是文本文檔、圖片、程序等。Linux上的文件操作,更接近于底層的文件操作。系統(tǒng)級程序設(shè)計也是內(nèi)核級程序設(shè)計。
二、文件操作
1.主要函數(shù)
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: 創(chuàng)建一個文件并打開
– O_EXCL: 測試文件是否存在,不存在則創(chuàng)建
– O_TRUNC: 以只寫或讀寫方式成功打開文件時,將文件長度截斷為0
– O_APPEND: 以追加方式打開文件
只有第二個參數(shù)flags = O_CREAT,第三個參數(shù)才會被用于設(shè)置新文件的權(quán)限,取值如下:
S_IRWXU: 文件所有者,讀、寫、執(zhí)行
S_IRUSR: 文件所有者,讀
S_IWUSR: 文件所有者,寫
S_IXUSR: 文件所有者,執(zhí)行
S_IRWXG: 文件所屬組,讀、寫、執(zhí)行
S_IRGRP: 文件所屬組,讀
S_IWGRP: 文件所屬組,寫
S_IXGRP: 文件所屬組,執(zhí)行
S_IRWXO: 其他人,讀、寫、執(zhí)行
S_IROTH: 其他人,讀
S_IWOTH: 其他人,寫
S_IXOTH: 其他人,執(zhí)行
3.read()
size_t read(int fd, void *buf, size_t count);參數(shù)說明:
fd: 從open或create函數(shù)返回的文件描述符
buf: 緩沖區(qū)
count: 讀取數(shù)據(jù)的字節(jié)數(shù)
返回值說明:
ssize_t: 有符號的size_t,有三種返回值
– 正數(shù):請求讀取的字節(jié)數(shù)
– 0: 文件長度有限,若讀寫位置距文件末尾只有20字節(jié),該函數(shù)請求讀取30字節(jié),則第一次讀取時返回值為20,第二次讀取時,返回0
– -1: 讀取文件出錯
4.write()
ssize_t write(int fd, void *buf, size_t count);參數(shù)說明:
參數(shù)使用基本與read函數(shù)相同
返回值說明:
返回寫入的字節(jié)數(shù)或者-1并設(shè)置errno
5.lseek()
ssize_t write(int fd, off_t offset, int whence);參數(shù)說明:
fd: 從open或create函數(shù)返回的文件描述符
offset: 對文件偏移量的設(shè)置,參數(shù)可正可負
whence: 控制設(shè)置當(dāng)前文件偏移量的方法
– whence = SEEK_SET: 文件偏移量被設(shè)置為offset
– whence = SEEK_CUR: 文件偏移量被設(shè)置為當(dāng)前偏移量+offset
– whence = SEEK_END: 文件偏移量被設(shè)置為文件長度+offset
返回值說明:
設(shè)置成功:返回新的偏移量
不成功:-1
6.close()
int close(int fd);返回值說明:
設(shè)置成功:返回0
不成功:-1
完整操作代碼
提示:對以上函數(shù)進行整合操作
主要內(nèi)容為打開文件寫入數(shù)據(jù)后關(guān)閉,重新打開后讀取剛剛寫入的文件。
#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課堂總結(jié)
本次課主要對Linux文件系統(tǒng)的基本操作進行了總結(jié),第一次接觸內(nèi)核級編程,雖然使用較熟悉的語言,但內(nèi)核級編程還是有些難度,同時本課程要求對Linux操作系統(tǒng)的的基本操作非常熟練,還是要多加聯(lián)系,來提高對Linux 系統(tǒng)操作的熟練度。
參考文章:https://blog.csdn.net/search_129_hr/article/details/124454969
總結(jié)
以上是生活随笔為你收集整理的系统级程序设计第一课内容——Linux系统与操作 2022.5.2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Node.js -- JavaScrip
- 下一篇: linux重新mac,用 Linux 让