C++ open()和read()函數(shù)使用詳解
對(duì)于Framework工程師來(lái)說(shuō),必要C或者C++編程能力是必須的,像對(duì)設(shè)備節(jié)點(diǎn)的操作是最基本的操作,那么我們便會(huì)用到open和read函數(shù)。open()函數(shù)用于打開(kāi)文件,而read()函數(shù)用于從打開(kāi)的文件中讀取數(shù)據(jù)。
1. open() 函數(shù)
open()函數(shù)是C/C++標(biāo)準(zhǔn)庫(kù)中的一個(gè)POSIX標(biāo)準(zhǔn)函數(shù),用于打開(kāi)一個(gè)文件并返回一個(gè)文件描述符(File Descriptor),以供后續(xù)的讀寫(xiě)操作。其函數(shù)聲明如下:
#include <fcntl.h> int open(const char* path, int flags, mode_t mode);
- path:要打開(kāi)或創(chuàng)建的目標(biāo)文件名。
- flags:對(duì)文件進(jìn)行多種操作的模式,如O_RDONLY(只讀打開(kāi))、O_WRONLY(只寫(xiě)打開(kāi))、O_RDWR(讀寫(xiě)打開(kāi))、O_CREAT(若文件不存在,創(chuàng)建文件)等。
- mode:新文件的訪問(wèn)權(quán)限,通常使用權(quán)限掩碼如S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH。
- 如果打開(kāi)文件成功,open()返回一個(gè)文件描述符;如果失敗,返回-1,并設(shè)置errno以指示錯(cuò)誤原因12。
2. read() 函數(shù)
read()函數(shù)用于從打開(kāi)的文件描述符中讀取數(shù)據(jù)。其函數(shù)聲明如下:
#include <unistd.h> ssize_t read(int fd, void* buf, size_t count);
- fd:文件描述符,由open()函數(shù)返回。buf:指向用于存儲(chǔ)讀取數(shù)據(jù)的緩沖區(qū)的指針。
- count:要讀取的字節(jié)數(shù)。
- 如果讀取成功,read()返回實(shí)際讀取的字節(jié)數(shù);如果遇到文件結(jié)束或發(fā)生錯(cuò)誤,返回-1,并設(shè)置errno以指示錯(cuò)誤原因23。
- 示例代碼
- 以下是一個(gè)簡(jiǎn)單的示例,展示如何使用open()和read()函數(shù)讀取文件:
#include <fcntl.h> #include <unistd.h> #include <string.h> #include <stdio.h> #include <stdlib.h> int main() { const char* filePath = "input.txt"; int fd = open(filePath, O_RDONLY); // 以只讀模式打開(kāi)文件 if (fd < 0) { perror("Failed to open file"); return -1; } char buffer[1024]; // 定義一個(gè)緩沖區(qū)用于存儲(chǔ)讀取的數(shù)據(jù) ssize_t bytesRead = read(fd, buffer, sizeof(buffer)); // 從文件中讀取數(shù)據(jù)到緩沖區(qū) if (bytesRead < 0) { // 如果讀取失敗或遇到文件結(jié)束符EOF perror("Failed to read file"); close(fd); // 關(guān)閉文件描述符 return -1; } printf("Read %ld bytes from file: %s\n", bytesRead, buffer); // 打印讀取的內(nèi)容和字節(jié)數(shù) close(fd); // 關(guān)閉文件描述符 return 0; }
到此這篇關(guān)于C++ open()和read()函數(shù)使用的文章就介紹到這了,更多相關(guān)C++ open()和read()函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Visual C++ 常用數(shù)據(jù)類(lèi)型轉(zhuǎn)換方法詳解
本文純粹是總結(jié)一下有關(guān)類(lèi)型轉(zhuǎn)換的貼子,需要的朋友可以參考下2017-06-06C語(yǔ)言實(shí)現(xiàn)BMP圖像邊緣檢測(cè)處理
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)BMP圖像邊緣檢測(cè)處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10C++類(lèi)靜態(tài)成員與類(lèi)靜態(tài)成員函數(shù)詳解
靜態(tài)成員不可在類(lèi)體內(nèi)進(jìn)行賦值,因?yàn)樗潜凰性擃?lèi)的對(duì)象所共享的。你在一個(gè)對(duì)象里給它賦值,其他對(duì)象里的該成員也會(huì)發(fā)生變化。為了避免混亂,所以不可在類(lèi)體內(nèi)進(jìn)行賦值2013-09-09簡(jiǎn)單介紹C語(yǔ)言中的umask()函數(shù)和truncate()函數(shù)
這篇文章主要介紹了簡(jiǎn)單介紹C語(yǔ)言中的umask()函數(shù)和truncate()函數(shù),是C語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09C語(yǔ)言實(shí)現(xiàn)循環(huán)單鏈表的示例代碼
這篇文章主要給大家詳細(xì)介紹了C語(yǔ)言如何實(shí)現(xiàn)循環(huán)單鏈表,文章通過(guò)代碼示例講解的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的參考價(jià)值,感興趣的小伙伴跟著小編一起來(lái)看看吧2023-08-08C語(yǔ)言?深入理解動(dòng)態(tài)規(guī)劃之計(jì)數(shù)類(lèi)DP
動(dòng)態(tài)規(guī)劃可謂是大名鼎鼎,筆試面試中的高頻考點(diǎn),也是重點(diǎn)難點(diǎn),動(dòng)態(tài)規(guī)劃類(lèi)型題目靈活多變,難度系數(shù)也相對(duì)較高,往往我們做不好動(dòng)態(tài)規(guī)劃的題目就會(huì)與心儀的offer失之交臂,本篇文章我們就一起來(lái)研究一下動(dòng)態(tài)規(guī)劃的計(jì)數(shù)類(lèi)DP2022-04-04Qt實(shí)現(xiàn)字幕滾動(dòng)效果的示例代碼
這篇文章主要介紹了Qt如何利用QTimer實(shí)現(xiàn)字幕滾動(dòng)功能,并且可以實(shí)現(xiàn)自行更改文本內(nèi)容、自適應(yīng)文本大小、自由調(diào)整速度等功能,感興趣的可以學(xué)習(xí)一下2022-06-06