Linux标准I/O库

发布时间 - 2025-07-21 00:00:00    点击率:

Linux 标准 I/O(Standard I/O)库提供了一系列函数,用于高级文件输入和输出操作。这些函数构建在底层文件 I/O 系统调用之上,为开发者提供了更便捷、更高级的文件处理方式。以下是一些常用的 Linux 标准 I/O 库函数:

  1. 文件指针和标准 I/O:标准 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 
int main() {
    // 打开文件
    FILE* file = fopen("example.txt", "r");
    if (file != NULL) {
        // 文件操作...
        // 关闭文件
        fclose(file);
    } else {
        perror("Error opening file");
    }
    return 0;
}
  1. 文件读写
    • 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 
#include 
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;
}
  1. 标准输入输出
    • 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 
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;
}
  1. 标准错误输出
    • int perror(const char* s); 输出一个错误消息。
#include 
int main() {
    FILE* file = fopen("nonexistent_file.txt", "r");
    if (file == NULL) {
        // 输出错误消息
        perror("Error opening file");
    }
    return 0;
}
  1. 标准输入输出重定向
    • int fflush(FILE* stream); 刷新缓冲区。
    • int setvbuf(FILE* stream, char* buffer, int mode, size_t size); 设置文件流的缓冲区。
    • int fseek(FILE* stream, long offset, int whence); 移动文件位置指示器。
#include 
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;
}
  1. 标准输入输出缓冲:标准 I/O 库使用缓冲区来提高性能。默认情况下,标准输入(stdin)和标准输出(stdout)是行缓冲的,而标准错误输出(stderr)是无缓冲的。

    • 行缓冲:当遇到换行符 \n 时,缓冲区会被刷新。
    • 全缓冲:当缓冲区满时,或者使用 fflush 函数时,缓冲区会被刷新。
#include 
int main() {
    // 默认为行缓冲,当遇到换行符时,缓冲区被刷新
    printf("Hello, ");  // 不会立即输出
    // 刷新缓冲区
    fflush(stdout);  // 输出 "Hello, "
    // 全缓冲,缓冲区满时被刷新
    printf("World!");  // 不会立即输出
    // 刷新缓冲区
    fflush(stdout);  // 输出 "World!"
    return 0;
}
  1. 标准输入输出重定向:标准输入输出重定向允许程序从不同的源读取输入或将输出发送到不同的目标。这在命令行中特别有用。

    • 标准输入重定向:./program 程序从 input.txt 中读取输入。
    • 标准输出重定向:./program > output.txt 程序将输出写入到 output.txt
#include 
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;
}
  1. 标准输入输出流的复制:通过 dupdup2 函数,可以复制文件描述符,实现标准输入输出流的重定向。

    • int dup(int oldfd); 复制文件描述符,返回新的文件描述符。
    • int dup2(int oldfd, int newfd);制文件描述符到指定的文件描述符,如果指定的文件描述符已经打开,则关闭它。
#include 
#include 
int main() {
    // 复制标准输出流到文件描述符 3
    int newfd = dup(STDOUT_FILENO);
    // 输出到标准输出和新的文件描述符
    printf("Hello, Standard Output!\n");
    dprintf(newfd, "Hello, New File Descriptor!\n");
    // 关闭新的文件描述符
    close(newfd);
    return 0;
}
  1. 标准错误输出:标准错误输出流 stderr 通常用于输出程序运行时的错误消息。
#include 
int main() {
    fprintf(stderr, "This is an error message.\n");
    perror("An error occurred");
    return 0;
}


# linux  # ai  # red  # format  # fopen  # fclose  # printf  # const  # perror  # char  # int  # void  # 指针  # input  # 重定向  # 换行符  # 发送到  # 这在  # 命令行  # 中特  # 要写  # 或将  # 流到  # 默认为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  昵图网官网入口 昵图网素材平台官方入口  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  5种Android数据存储方式汇总  b2c电商网站制作流程,b2c水平综合的电商平台?  如何快速生成高效建站系统源代码?  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  Python函数文档自动校验_规范解析【教程】  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  高防服务器租用指南:配置选择与快速部署攻略  利用JavaScript实现拖拽改变元素大小  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Swift中switch语句区间和元组模式匹配  Laravel如何发送系统通知?(Notification渠道示例)  移动端脚本框架Hammer.js  Android实现代码画虚线边框背景效果  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  高防服务器租用首荐平台,企业级优惠套餐快速部署  网站制作壁纸教程视频,电脑壁纸网站?  微信公众帐号开发教程之图文消息全攻略  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel怎么在Controller之外的地方验证数据  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  微信小程序 canvas开发实例及注意事项  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  企业网站制作这些问题要关注  Internet Explorer官网直接进入 IE浏览器在线体验版网址  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  黑客如何通过漏洞一步步攻陷网站服务器?  Laravel如何创建自定义Artisan命令?(代码示例)  如何用虚拟主机快速搭建网站?详细步骤解析  北京专业网站制作设计师招聘,北京白云观官方网站?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  打造顶配客厅影院,这份100寸电视推荐名单请查收  如何正确下载安装西数主机建站助手?  进行网站优化必须要坚持的四大原则