news 2026/8/28 6:38:33

Linux C 语言文件 IO 与构建工具实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux C 语言文件 IO 与构建工具实战指南

软件包管理器

Linux下使用vscode进行代码编写

makefile

sudo apt install -y build-essential

使用这个进行安装。其使用格式如下

CC:=gcc fopen_test: fopen_test.c -$(CC) -o $@ $^ -./$@ -rm ./$@

文件IO

打开/关闭文件

#include<stdio.h> int main() { FILE* ioFile = fopen("a.txt","w+"); if(ioFile == NULL) { printf("打开错误\n"); } else { printf("打开成功\n"); } int ret = fclose(ioFile); if(ret == EOF) { printf("关闭文件失败\n"); } else if(ret == 0) { printf("关闭文件成功"); } return 0; }

向文件写入数据

#include<stdio.h> int main() { FILE* ioFile = fopen("a.txt","a+"); if(ioFile == NULL) { printf("打开错误\n"); } else { printf("打开成功\n"); } fputc('a',ioFile); fputs("i am real\n",ioFile); char arr[] = "云山"; fprintf(ioFile,"大风手印:%s\n",arr); int ret = fclose(ioFile); if(ret == EOF) { printf("关闭文件失败\n"); } else if(ret == 0) { printf("关闭文件成功"); } return 0; }

从文件读取数据

#include <stdio.h> int main() { FILE *ioFile = fopen("a.txt", "r"); if (ioFile == NULL) { printf("打开错误\n"); } else { printf("打开成功\n"); } // char get = fgetc(ioFile); // while(get != EOF) // { // printf("%c",get); // get = fgetc(ioFile); // } // printf("\n"); // char arr[128]; // while(fgets(arr, sizeof(arr), ioFile)) // { // printf("%s",arr); // } // printf("\n"); char arr[128]; while(fscanf(ioFile, "%s", arr) == 1) { printf("%s\n", arr); } printf("\n"); int ret = fclose(ioFile); if (ret == EOF) { printf("关闭文件失败\n"); } else if (ret == 0) { printf("关闭文件成功"); } return 0; }

标准输入/输出/错误

#include<stdio.h> #include<stdlib.h> int main() { char *ch = (char*)malloc(sizeof(char)*100); fgets(ch,100,stdin); fputs(ch,stdout); return 0; }

系统调用

#include<unistd.h> #include<fcntl.h> #include<stdio.h> int main() { int ret = open("a.txt",O_RDONLY|O_CREAT|O_WRONLY,0664); if(ret == -1) { printf("打开文件失败\n"); } char arr[32]; read(ret,arr,sizeof(arr)); printf("%s",arr); return 0; } #include<unistd.h> #include<fcntl.h> #include<stdio.h> #include<stdlib.h> int main() { int fd = open("a.txt",O_RDONLY); if(fd == -1) { printf("打开文件失败\n"); exit(EXIT_FAILURE); } char buffer[256]; ssize_t bytes = 0; while((bytes = read(fd,buffer,sizeof(buffer))) > 0) { write(STDOUT_FILENO, buffer, bytes); } printf("\n"); if(bytes == -1) { printf("打印失败\n"); close(fd); exit(EXIT_FAILURE); } return 0; }

文件描述符

当打开一个文件,会得到一个句柄,里面的信息就与文件物理进行相互关联,来保证我们对文件进行操作。

0是标准输入(stdin)的文件描述符,1是标准输出(stdout)的文件描述符,2是标准错误(stderr)的文件描述符。

struct file { ...... atomic_long_t f_count; // 引用计数,管理文件对象的生命周期 struct mutex f_pos_lock; // 保护文件位置的互斥锁 loff_t f_pos; // 当前文件位置(读写位置) ...... struct path f_path; // 记录文件路径 struct inode *f_inode; // 指向与文件相关联的inode对象的指针,该对象用于维护文件元数据,如文件类型、访问权限等 const struct file_operations *f_op; // 指向文件操作函数表的指针,定义了文件支持的操作,如读、写、锁定等 ...... void *private_data; // 存储特定驱动或模块的私有数据 ...... } __randomize_layout __attribute__((aligned(4)));
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 6:38:15

MSC外泌体如何实现15L规模生产?微载体、生物反应器和EV质量控制

摘要&#xff1a; MSC-EV相关研究和转化应用持续推进&#xff0c;但上游生产的规模化放大仍然是工艺开发中的重要问题。本研究基于无动物源MSC及配套培养基体系&#xff0c;采用微载体-搅拌罐生物反应器工艺&#xff0c;在250 mL规模完成关键工艺参数优化后&#xff0c;将工艺进…

作者头像 李华
网站建设 2026/8/28 6:36:59

蚊子目标检测数据集 | 蚊虫检测 病媒生物 智能硬件 轻量化模型 目标检测 YOLO格式 深度学习数据集9015期

蚊子目标检测数据集 | 蚊虫检测 病媒生物 智能硬件 轻量化模型 目标检测 YOLO格式 深度学习数据集9015期 数据集概述 本数据集专注于单一场景下的蚊虫视觉检测&#xff0c;服务于病媒生物监测、居家害虫防治及环境评估。数据涵盖常见蚊种&#xff0c;适配智能诱捕器、社区监测点…

作者头像 李华
网站建设 2026/8/28 6:34:17

挑战-响应认证在工业传感器节点上是怎么跑起来的

挑战-响应&#xff08;Challenge-Response&#xff09;是设备身份认证里最经典的协议模式&#xff0c;工业传感器的身份验证大多基于它构建。理解它的运转逻辑&#xff0c;是设计节点安全方案的第一步。协议的基本流程假设平台要验证一个传感器节点的合法性&#xff0c;流程如下…

作者头像 李华
网站建设 2026/8/28 6:33:55

MiniMax H3本地部署与ComfyUI工作流实战:从API体验到显存优化

最近 MiniMax 的讨论热度明显上升&#xff0c;一方面是 M3 / M2.7 系列开放限时免费体验&#xff0c;另一方面是图像生成模型 H3 的本地部署话题不断出现在社区里。很多人看到“限时免费”就急着注册&#xff0c;看到“H3 开源”就以为自己能轻松在本地跑起来&#xff0c;结果卡…

作者头像 李华
网站建设 2026/8/28 6:32:54

SpringBoot+Vue数学建模论文阅卷系统:全栈开发与核心实现

1. 项目概述与核心价值最近在整理毕设项目库&#xff0c;发现一个挺有意思的选题&#xff1a;基于SpringBoot的数学建模论文阅卷系统。这个项目乍一看有点跨界&#xff0c;把传统的教育评阅和现代的后端技术栈、前端框架结合在了一起。我琢磨了一下&#xff0c;这其实反映了当前…

作者头像 李华