日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

系统级程序设计第一课内容——Linux系统与操作 2022.5.2

發布時間:2024/3/13 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 系统级程序设计第一课内容——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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。