最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C中的open(),?write(),?close(),?fopen()詳解

 更新時(shí)間:2024年10月26日 09:05:45   作者:hisun9  
本文主要介紹了C語言中的open(),?write(),?close(),?fopen()等文件操作函數(shù),open()函數(shù)用于打開文件,write()函數(shù)用于寫入數(shù)據(jù),close()函數(shù)用于關(guān)閉已打開的文件描述符

open() 函數(shù)

原型

#include <fcntl.h>
#include <unistd.h>
int open(const char *pathname, int flags, mode_t mode);
  • pathname:要打開的文件的路徑。

  • flags:打開文件的模式(如只讀、只寫等)。常用的標(biāo)志包括:

    • O_RDONLY:只讀模式。
    • O_WRONLY:只寫模式。
    • O_RDWR:讀寫模式。
    • O_CREAT:如果文件不存在,則創(chuàng)建新文件。
    • O_TRUNC:如果文件已存在并且是以寫入模式打開的,則截?cái)辔募榱汩L度。
    • O_APPEND:將寫入操作附加到文件末尾。
  • mode:文件權(quán)限,通常在創(chuàng)建文件時(shí)使用。它是一個(gè)八進(jìn)制值(例如 0666),表示文件的讀寫權(quán)限(關(guān)于0666的解釋請(qǐng)看這篇Linux中文件的權(quán)限)。

返回值

  • 如果成功,返回一個(gè)非負(fù)整數(shù)(文件描述符),可以用來進(jìn)行后續(xù)的讀寫操作。

  • 如果失敗,返回 -1,并且可以通過 errno(是一個(gè)全局變量,定義在<errno.h>頭文件中,這篇有涉及到) 獲取錯(cuò)誤信息。

錯(cuò)誤處理

常見的錯(cuò)誤包括:

  • EACCES:權(quán)限被拒絕。

  • ENOENT:文件不存在。

  • EEXIST:試圖創(chuàng)建一個(gè)已存在的文件(當(dāng)使用 O_CREAT 時(shí))。

舉一個(gè)例子

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
int main() {
    int fd = open("example.txt", O_RDWR, 0666);
    if (fd == -1) {
        perror("Error opening file");
        close(fd);
        return 1;
    }
    // 使用文件描述符 fd 進(jìn)行讀寫操作...
    close(fd); // 關(guān)閉文件
    return 0;
}

輸出如下:

img

write()函數(shù)

原型

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
  • fd:要寫入的文件描述符,通常是 open() 返回的值。

  • buf:指向要寫入的數(shù)據(jù)的指針。

  • count:要寫入的字節(jié)數(shù)。

返回值

  • 如果成功,返回實(shí)際寫入的字節(jié)數(shù)。

  • 如果失敗,返回 -1,并且可以通過 errno 獲取錯(cuò)誤信息。

錯(cuò)誤處理

常見的錯(cuò)誤包括:

  • EFAULT:buf 指針無效。

  • EBADF:文件描述符無效。

  • EIO:I/O 錯(cuò)誤。

舉一個(gè)例子

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
int main() {
    int fd = open("example.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
    if (fd == -1) {
        perror("Error opening file");
        close(fd);
        return 1;
    }
    const char *data = "Hello, World!\n";
    ssize_t bytes_written = write(fd, data, 14);
    if (bytes_written == -1) {
        perror("Error writing to file");
        close(fd);
        return 1;
    }
    printf("Wrote %zd bytes to file.\n", bytes_written);
    close(fd); // 關(guān)閉文件
    return 0;
}

輸出如下:

img

close()函數(shù)

close() 函數(shù)用于關(guān)閉一個(gè)已打開的文件描述符。在 C/C++ 編程中,關(guān)閉文件描述符是一個(gè)重要的步驟,以確保資源被正確釋放。

原型

#include <unistd.h>
int close(int fd);
  • fd:要關(guān)閉的文件描述符,通常是之前通過 open()、socket()、pipe() 等函數(shù)獲取的值。

返回值

  • 如果成功,close() 返回 0。

  • 如果失敗,返回 -1,并且可以通過 errno 獲取錯(cuò)誤信息。

工作原理

  • 釋放資源:關(guān)閉文件描述符后,操作系統(tǒng)會(huì)釋放與該文件描述符相關(guān)的所有資源。這包括文件的緩沖區(qū)、文件鎖和其他相關(guān)信息。

  • 防止資源泄漏:如果不調(diào)用 close(),程序在結(jié)束時(shí)可能會(huì)造成資源泄漏,因?yàn)椴僮飨到y(tǒng)可能會(huì)保留這些資源,直到程序終止。

  • 同步數(shù)據(jù):在某些情況下,關(guān)閉文件描述符會(huì)導(dǎo)致緩沖區(qū)中的數(shù)據(jù)被強(qiáng)制寫入磁盤。對(duì)于寫入模式打開的文件,關(guān)閉操作可能會(huì)確保所有待寫入的數(shù)據(jù)都已被寫入。

錯(cuò)誤處理

常見的錯(cuò)誤包括:

  • EBADF:文件描述符無效或未打開。

  • EIO:發(fā)生 I/O 錯(cuò)誤。

舉一個(gè)例子

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
int main() {
    int fd = open("example.txt", O_WRONLY | O_CREAT, 0666);
    if (fd == -1) {
        perror("Error opening file");
        return 1;
    }
    // 執(zhí)行寫操作...
    if (close(fd) == -1) {
        perror("Error closing file");
        return 1;
    }
    printf("File closed successfully.\n");
    return 0;
}

輸出如下:

img

fopen()函數(shù)

fopen() 是 C 標(biāo)準(zhǔn)庫中的一個(gè)函數(shù),用于打開一個(gè)文件并返回一個(gè)文件指針,以便后續(xù)進(jìn)行讀寫操作。它通常在 <stdio.h> 頭文件中聲明。

原型

FILE *fopen(const char *filename, const char *mode);
  • filename:要打開的文件的名稱(字符串)。

  • mode:打開文件的模式,指示將如何訪問該文件。常用的模式包括:

    • "r":只讀模式,文件必須存在。

    • "w":只寫模式,若文件存在則清空內(nèi)容,不存在則創(chuàng)建新文件。

    • "a":附加模式,數(shù)據(jù)會(huì)被寫入到文件末尾。

    • "r+":讀寫模式,文件必須存在。

    • "w+":讀寫模式,若文件存在則清空內(nèi)容,不存在則創(chuàng)建新文件。

    • "a+":附加讀寫模式,可以讀文件內(nèi)容,寫入數(shù)據(jù)到文件末尾。

返回值

  • 返回一個(gè)指向 FILE 結(jié)構(gòu)的指針,表示打開的文件。

  • 如果打開失敗,返回 NULL,并且可以通過 errno 獲取錯(cuò)誤信息。

舉一個(gè)例子

#include <stdio.h>
int main() {
    FILE *file = fopen("example.txt", "r"); // 嘗試以只讀模式打開文件
    if (file == NULL) {
        perror("Error opening file"); // 打印錯(cuò)誤信息
        fclose(file); // 關(guān)閉文件
        return 1;
    }
    // 進(jìn)行文件操作...
    fclose(file); // 關(guān)閉文件
    return 0;
}

輸出如下:

img

重要注意事項(xiàng)

  • 錯(cuò)誤檢查:在使用 fopen() 后,始終檢查返回值,以確保文件成功打開。

  • 關(guān)閉文件:使用 fclose() 函數(shù)關(guān)閉打開的文件,以釋放系統(tǒng)資源。

fopen()和open()有什么不同

fopen() 更適合一般的文件處理需求,提供了較高的抽象層次,而 open() 則適合需要低級(jí)文件控制的情況。

語言和庫

fopen()

 - 是 C 標(biāo)準(zhǔn)庫中的函數(shù),通常用于 C 和 C++ 編程。
 - 提供更高層次的文件操作接口。

open()

 - 是 POSIX 系統(tǒng)調(diào)用,主要用于 C 語言(也可用于C++),適用于 UNIX/Linux 系統(tǒng)。
 - 提供低級(jí)別的文件操作。
  • 返回值

    fopen()

    open()

    • 返回一個(gè)指向 FILE 結(jié)構(gòu)的指針,用于后續(xù)的文件操作。

    • 如果打開失敗,返回 NULL。

    • 返回一個(gè)文件描述符(非負(fù)整數(shù)),用于標(biāo)識(shí)打開的文件。

    • 如果打開失敗,返回 -1,并且可以通過 errno 檢查錯(cuò)誤。

  • 文件模式

    fopen()

    open()

    • 使用字符串來指定打開模式(如 "r"、"w"、"a" 等)。

    • 提供更方便的讀寫功能。

    • 使用整數(shù)標(biāo)志來指定打開模式(如 O_RDONLY、O_WRONLY、O_RDWR 等)。

    • 適合底層文件操作,允許更多的細(xì)粒度控制。

  • 錯(cuò)誤處理

    fopen()

    open()

    • 錯(cuò)誤處理通常依賴于返回值(檢查指針是否為 NULL)。
    • 需要檢查返回值并結(jié)合 errno 獲取具體錯(cuò)誤信息。
  • 文件操作

    fopen()

    open()

    • 提供了 fread、fwritefprintf、fscanf 等高級(jí)文件操作函數(shù),適合格式化輸入輸出。
    • 主要與 read()、write()、lseek()、close() 等系統(tǒng)調(diào)用一起使用,適合底層的文件操作。

到此這篇關(guān)于C中的open(), write(), close(), fopen()的文章就介紹到這了,更多相關(guān)C中的open(), write(), close(), fopen()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Visual Studio Code 配置C、C++環(huán)境/編譯并運(yùn)行的流程分析

    Visual Studio Code 配置C、C++環(huán)境/編譯并運(yùn)行的流程分析

    這篇文章主要介紹了Visual Studio Code 配置C、C++環(huán)境/編譯并運(yùn)行的流程分析,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • C語言指針入門的簡單實(shí)例教程

    C語言指針入門的簡單實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于C語言指針入門的簡單實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C++如何實(shí)現(xiàn)字符串的部分復(fù)制

    C++如何實(shí)現(xiàn)字符串的部分復(fù)制

    這篇文章主要介紹了C++如何實(shí)現(xiàn)字符串的部分復(fù)制問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++用read()和write()讀寫二進(jìn)制文件的超詳細(xì)教程

    C++用read()和write()讀寫二進(jìn)制文件的超詳細(xì)教程

    二進(jìn)制的文件肉眼我們是讀不懂的,如果通過二進(jìn)制的讀寫操作就可以讀懂,下面這篇文章主要給大家介紹了關(guān)于C++用read()和write()讀寫二進(jìn)制文件的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • QT實(shí)現(xiàn)多文件拖拽獲取路徑的方法

    QT實(shí)現(xiàn)多文件拖拽獲取路徑的方法

    這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)多文件拖拽獲取路徑的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C/C++使用C語言實(shí)現(xiàn)多態(tài)

    C/C++使用C語言實(shí)現(xiàn)多態(tài)

    這篇文章主要介紹了C/C++多態(tài)的實(shí)現(xiàn)機(jī)制理解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下,希望能給你帶來幫助
    2021-08-08
  • C++ 中滾動(dòng)條的滾動(dòng)問題

    C++ 中滾動(dòng)條的滾動(dòng)問題

    本文主要通過一個(gè)示例,給大家介紹了C++中滾動(dòng)條的滾動(dòng)問題,以及相關(guān)參數(shù)的解釋,非常的詳細(xì),有需要的小伙伴可以參考下。
    2015-06-06
  • C++實(shí)現(xiàn)編碼轉(zhuǎn)換的示例代碼

    C++實(shí)現(xiàn)編碼轉(zhuǎn)換的示例代碼

    這篇文章主要介紹了C++實(shí)現(xiàn)編碼轉(zhuǎn)換的示例代碼,幫助大家快捷的實(shí)現(xiàn)編碼轉(zhuǎn)換,感興趣的朋友可以了解下
    2020-08-08
  • C++ 格式化日志輸出實(shí)現(xiàn)代碼

    C++ 格式化日志輸出實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++ 格式化日志輸出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2019-04-04
  • Qt開發(fā)之獲取電腦磁盤容量

    Qt開發(fā)之獲取電腦磁盤容量

    項(xiàng)目中用到了監(jiān)測某磁盤(如:C盤、D盤等)的總?cè)萘亢涂捎萌萘浚榱艘幌?,發(fā)現(xiàn)其實(shí)挺簡單,本文就來用QT實(shí)現(xiàn)這一功能吧,希望對(duì)大家有所幫助
    2023-04-04

最新評(píng)論

绥阳县| 清镇市| 景德镇市| 陕西省| 玉溪市| 腾冲县| 新巴尔虎右旗| 合肥市| 民和| 鹿邑县| 牟定县| 嘉善县| 胶南市| 邓州市| 宜川县| 原平市| 元氏县| 莲花县| 柳州市| 沙雅县| 广宗县| 阿克| 武强县| 霍州市| 勐海县| 南召县| 徐州市| 罗田县| 郁南县| 贵州省| 招远市| 亚东县| 平南县| 东丰县| 凤翔县| 江津市| 乌审旗| 沅陵县| 丰台区| 古田县| 乐亭县|