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)文章
C語(yǔ)言實(shí)現(xiàn)打印九九乘法表的四種方式小結(jié)
這篇文章主要為大家介紹了C語(yǔ)言實(shí)現(xiàn)打印九九乘法表的四種方式,文中的示例代碼講解詳細(xì),簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-07-07
C++模板基礎(chǔ)之函數(shù)模板與類模板實(shí)例詳解
C++ 除了支持函數(shù)模板,還支持類模板(Class Template),所以下面這篇文章主要給大家介紹了關(guān)于C++模板基礎(chǔ)之函數(shù)模板與類模板的相關(guān)資料,需要的朋友可以參考下2021-06-06
關(guān)于win32 gettimeofday替代方案
下面小編就為大家?guī)?lái)一篇關(guān)于win32 gettimeofday替代方案。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
C語(yǔ)言中隨機(jī)數(shù)rand()函數(shù)詳解
大家好,本篇文章主要講的是C語(yǔ)言中隨機(jī)數(shù)rand()函數(shù)詳解,感興趣的同學(xué)感快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02
QT實(shí)現(xiàn)自定義Http客戶端的示例代碼
這篇文章主要為大家詳細(xì)介紹了QT如何實(shí)現(xiàn)自定義Http客戶端的,可以實(shí)現(xiàn)支持get,post請(qǐng)求方式;支持連接超時(shí)處理;支持網(wǎng)絡(luò)錯(cuò)誤,嘗試重連等功能,感興趣的小伙伴可以學(xué)習(xí)一下2022-11-11
C++實(shí)現(xiàn)將數(shù)據(jù)寫(xiě)入Excel工作表的示例代碼
直觀的界面、出色的計(jì)算功能和圖表工具,使Excel成為最流行的個(gè)人計(jì)算機(jī)數(shù)據(jù)處理軟件。在本文中,您將學(xué)習(xí)如何使用?Spire.XLS?for?C++?創(chuàng)建?Excel?文檔,以及如何將數(shù)據(jù)寫(xiě)入?Excel?工作表2023-03-03
嵌入式C語(yǔ)言二級(jí)指針在鏈表中的應(yīng)用
這篇文章主要為大家介紹了嵌入式C語(yǔ)言二級(jí)指針在鏈表中的應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04

