深入底層:c語言文件操作中read函數(shù)的原理
2022-08-26 00:08 作者:StepfenShawn | 我要投稿
# 引言
我們都知道c語言是一門非常強大的語言,這得益于它對系統(tǒng)底層的完美封裝,因此用c語言讀取文件的效率非常高, 接下來我們來看看讀取文件最基本的函數(shù) -- read
# read函數(shù)的定義
我們來看一下read的定義吧:
ssize_t read(int fd,void *buf,size_t nbyte)
調(diào)用該函數(shù)就會從fd中讀取最多nbytes個字節(jié)到緩沖區(qū)buf中
# 分析
首先我們看到第一個參數(shù)fd是int類型的, 當(dāng)你打開文件時可以調(diào)用open函數(shù)返回值賦給fd:
int fd = open(文件地址)
read(fd, ...)
當(dāng)然我們也可以不打開文件, 我們使用STDIN_FILENO 可以建一個待讀寫的文件:
read(STDIN_FILENO, ...)
實際上, `fd`指的就是文件描述符, 那么問題來了, 什么是文件描述符呢?
# 文件描述符是什么?
我們可以把文件描述符理解成一個索引, 當(dāng)調(diào)用read函數(shù)的時候, 系統(tǒng)內(nèi)核會利用文件描述符(file descriptor)來訪問文件。 而打開現(xiàn)存文件或新建文件時,也就是說調(diào)用open函數(shù)后, 系統(tǒng)內(nèi)核會返回一個文件描述符。?
其實在操作系統(tǒng)內(nèi)部, 對文件進(jìn)行相關(guān)操作時,都可能會創(chuàng)建對應(yīng)的文件描述符,? 這不正正應(yīng)證了那句名言`Linux 中一切都是文件`
# 模擬vim編輯器的輸入模式
接下來我們就能用c語言read寫模擬vim的輸入模式了:
#include <stdio.h>
#include <unistd.h>
int main() {
? ?char c;
? ?while (read(STDIN_FILENO, &c, 1) == 1 && c != 'q');
? ?return 0;
}
這就是以上內(nèi)容了, 喜歡的話給個關(guān)注吧!!!
標(biāo)簽: