文件系統編程——基礎知識

1、系統調用:所有的操作系統都提供多種服務的入口點,程序由此向內核請求服務。這些可直接進入內核的入口點被稱爲系統調用。

2、操作系統提供的服務:進程控制、文件系統控制、內存管理、網絡管理、用戶管理、進程間通信。
在Linux中,爲了更好地保護內核空間,程序的運行空間分爲內核空間和用戶空間(也就是常稱的內核態和用戶態),它們分別運行在不同的級別上,在邏輯上是相互隔離的。因此,用戶進程在通常情況下不允許訪問內核數據,也無法使用內核函數,它們只能在用戶空間操作用戶數據,調用用戶空間的函數。

3、文件:系統資源(內存、硬盤、一般設備、進程間通信的通道等)的一個抽象, 對系統資源進行訪問的一個通用接口。
對資源提供通用的操作接口,可以極大地簡化系統編程接口的設計。
文件類型:
普通文件 一般意義上的文件,作爲數據存儲在磁盤中,可以隨機訪問文件的內容。Linux系統中的文件是面向字節的,文件的內容以字節爲單位進行存儲和訪問。
目錄文件 目錄是一種特殊的文件,目錄可以像普通文件一樣打開、關閉以及進行相應的操作。
管道文件 管道是Linux中的一種進程間通信的機制。
設備文件 設備文件沒有具體的內容,對設備文件的讀寫操作實際上與某個設備的輸入輸出操作關聯在一起。
符號鏈接 符號鏈接的內容是指向另一個文件的路徑。當對符號鏈接進行操作時,系統會根據情況將這個操作轉移到它所指向的文件上去,而不是對它本身進行操作。

文件描述符:所有執行I/O操作的系統調用使用文件描述符來表示打開的文件。 文件描述符是一個非負整數。文件描述符可以表示各種類型的打開的文件。對文件的操作只要使用文件描述符即可指定所操作的文件。

4、文件操作過程:打開文件,打開成功後,應用程序將獲得文件描述符。 應用程序使用文件描述符對文件進行讀寫等操作。全部操作完畢後,應用程序需要將文件關閉以釋放用於管理打開文件的內存。

幾個文件操作函數:
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);

read()

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);

write()

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);

close()

#include <unistd.h>
int close(int fd);

lseek()

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fildes, off_t offset, int whence);
發佈了53 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章