99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

必知必會的Linux標準I/O庫

Linux 標準 I/O(Standard I/O)庫提供了一組函數,用于進行高級別的文件輸入和輸出操作。它建立在底層文件 I/O 系統調用之上,為開發者提供了更方便、更高級別的文件處理方式。以下是一些常用的 Linux 標準 I/O 庫函數:

1. 文件指針

標準 I/O 使用 FILE 結構表示文件流,通過文件指針(FILE*)進行操作。FILE 結構包含了文件的緩沖區、文件描述符、文件位置指示器等信息。

2. 文件打開和關閉

  • FILE* fopen(const char* filename, const char* mode);

    • 打開文件,并返回一個文件指針。
    • filename 是文件名。
    • mode 指定打開文件的模式(例如:"r" - 只讀,"w" - 只寫,"a" - 追加,"r+" - 讀寫,"w+" - 讀寫,"a+" - 讀寫追加等)。
  • int fclose(FILE* stream);

    • 關閉文件流,釋放相關資源。
#include <stdio.h>

int main() {
    // 打開文件
    FILE* file = fopen("example.txt", "r");

    if (file != NULL) {
        // 文件操作...

        // 關閉文件
        fclose(file);
    } else {
        perror("Error opening file");
    }

    return 0;
}

3. 文件讀寫

  • size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);

    • 從文件讀取數據到緩沖區。
    • ptr 是數據緩沖區的指針。
    • size 是每個數據項的大小。
    • nmemb 是要讀取的數據項數量。
    • stream 是文件指針。
  • size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);

    • 將數據從緩沖區寫入文件。
    • ptr 是數據緩沖區的指針。
    • size 是每個數據項的大小。
    • nmemb 是要寫入的數據項數量。
    • stream 是文件指針。
#include <stdio.h>

int main() {
    FILE* file = fopen("example.txt", "w");

    if (file != NULL) {
        // 寫入數據
        const char* data = "Hello, Standard I/O!";
        fwrite(data, sizeof(char), strlen(data), file);

        // 關閉文件
        fclose(file);
    } else {
        perror("Error opening file");
    }

    return 0;
}

4. 標準輸入輸出

  • int fprintf(FILE* stream, const char* format, ...);

    • 將格式化的數據寫入文件。
  • int fscanf(FILE* stream, const char* format, ...);

    • 從文件中讀取格式化的數據。
  • int printf(const char* format, ...);

    • 將格式化的數據寫入標準輸出。
  • int scanf(const char* format, ...);

    • 從標準輸入讀取格式化的數據。
#include <stdio.h>

int main() {
    FILE* file = fopen("example.txt", "w");

    if (file != NULL) {
        // 將格式化的數據寫入文件
        fprintf(file, "The answer is: %d\n", 42);

        // 關閉文件
        fclose(file);
    } else {
        perror("Error opening file");
    }

    return 0;
}

5. 標準錯誤輸出

  • int perror(const char* s);
    • 輸出一個錯誤消息。
#include <stdio.h>

int main() {
    FILE* file = fopen("nonexistent_file.txt", "r");

    if (file == NULL) {
        // 輸出錯誤消息
        perror("Error opening file");
    }

    return 0;
}

6. 標準輸入輸出重定向

  • int fflush(FILE* stream);

    • 刷新緩沖區。
  • int setvbuf(FILE* stream, char* buffer, int mode, size_t size);

    • 設置文件流的緩沖區。
  • int fseek(FILE* stream, long offset, int whence);

    • 移動文件位置指示器。
#include <stdio.h>

int main() {
    FILE* file = fopen("example.txt", "w");

    if (file != NULL) {
        // 寫入數據
        fprintf(file, "Hello, Standard I/O!");

        // 刷新緩沖區
        fflush(file);

        // 移動文件位置指示器
        fseek(file, 0, SEEK_SET);

        // 關閉文件
        fclose(file);
    } else {
        perror("Error opening file");
    }



    return 0;
}

7. 標準輸入輸出緩沖

標準 I/O 庫使用緩沖區來提高性能。默認情況下,標準輸入(stdin)和標準輸出(stdout)是行緩沖的,而標準錯誤輸出(stderr)是無緩沖的。

  • 行緩沖:當遇到換行符 \n 時,緩沖區會被刷新。
  • 全緩沖:當緩沖區滿時,或者使用 fflush 函數時,緩沖區會被刷新。
#include <stdio.h>

int main() {
    // 默認為行緩沖,當遇到換行符時,緩沖區被刷新
    printf("Hello, ");  // 不會立即輸出

    // 刷新緩沖區
    fflush(stdout);  // 輸出 "Hello, "

    // 全緩沖,緩沖區滿時被刷新
    printf("World!");  // 不會立即輸出

    // 刷新緩沖區
    fflush(stdout);  // 輸出 "World!"

    return 0;
}

8. 標準輸入輸出重定向

標準輸入輸出重定向允許程序從不同的源讀取輸入或將輸出發送到不同的目標。這在命令行中特別有用。

  • 標準輸入重定向:./program < input.txt

    • 程序從 input.txt 中讀取輸入。
  • 標準輸出重定向:./program > output.txt

    • 程序將輸出寫入到 output.txt
#include <stdio.h>

int main() {
    // 從標準輸入讀取數據
    int number;
    scanf("%d", &number);
    printf("You entered: %d\n", number);

    // 將輸出重定向到文件
    freopen("output.txt", "w", stdout);
    printf("This will be written to output.txt\n");

    return 0;
}

9. 標準輸入輸出流的復制

通過 dupdup2 函數,可以復制文件描述符,實現標準輸入輸出流的重定向。

  • int dup(int oldfd);

    • 復制文件描述符,返回新的文件描述符。
  • int dup2(int oldfd, int newfd);

    • 復制文件描述符到指定的文件描述符,如果指定的文件描述符已經打開,則關閉它。
#include <stdio.h>
#include <unistd.h>

int main() {
    // 復制標準輸出流到文件描述符 3
    int newfd = dup(STDOUT_FILENO);

    // 輸出到標準輸出和新的文件描述符
    printf("Hello, Standard Output!\n");
    dprintf(newfd, "Hello, New File Descriptor!\n");

    // 關閉新的文件描述符
    close(newfd);

    return 0;
}

10. 標準錯誤輸出

標準錯誤輸出流 stderr 通常用于輸出程序運行時的錯誤消息。

#include <stdio.h>

int main() {
    fprintf(stderr, "This is an error message.\n");
    perror("An error occurred");

    return 0;
}

以上是 Linux 標準 I/O 庫的一些高級特性,包括緩沖機制、輸入輸出重定向和文件描述符的復制。這些特性使得標準 I/O 庫更加靈活,適用于各種輸入輸出場景。

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 3
收藏 3
關注 37
成為作者 賺取收益
全部留言
0/200
  • dy-GkHdFjL5 2024-03-06 15:36
    學習一下。
    回復
主站蜘蛛池模板: www.操操操| 日本亚洲不卡视频 | 超碰97人人爱 | 国产免费国产 | 狠狠操操 | 特黄色一级片 | 久久久ww| 亚洲欧洲精品一区二区三区 | 精品无码成人片一区二区 | 国产日韩一级片 | 多人调教到高潮失禁h重口文 | 欧美黄色一级片视频 | 九七九色丨麻豆 | 久久99视频精品 | 日本无码色哟哟婷婷最新网站 | 麻豆视频免费在线观看 | 国产精品vⅰdeoXXXX国产 | 国产精品久久久爽爽爽麻豆色哟哟 | 爱情岛论坛自拍亚洲品质极速福利 | 写作业写着写着就插了视频 | 天地争霸美猴王国语在线观看免费 | 欧美日韩国产va另类 | 欧美性猛交xxxx免费看野外 | 99re免费视频精品全部 | 91精品国产色综合久久不卡蜜臀 | 91精品在线视频观看 | 国产精品无码无卡在线观看久 | 国产色爱综合网 | 日韩视频一区尤物少妇偷拍 | 国产精品无码天天爽视频 | 国产成人AV性色在线影院色戒 | 久久精品网址 | 欧美大黄大色一级毛片 | 精品无码AV无码专区 | 一区二区福利 | 99re8在线精品视频免费播放 | 韩日一级片 | 人妻丝袜AV中文系列先锋影音 | 真人在线观看色网视频 | 蜜柚av乱码久久久久久水 | 国产在线观看香蕉视频网 |