当前位置: 首页 > news >正文

linux C 语言开发 (七) 文件 IO 和标准 IO

   文章的目的为了记录使用C语言进行linux 开发学习的经历。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。

 相关链接:

linux C 语言开发 (一) Window下用gcc编译和gdb调试

linux C 语言开发 (二) VsCode远程开发 linux

linux C 语言开发 (三) 建立云服务器

linux C 语言开发 (四) linux系统常用命令

linux C 语言开发 (五) linux系统目录结构

linux C 语言开发 (六) 程序的编辑和编译(vim、gcc)

linux C 语言开发 (七) 文件 IO 和标准 IO

linux C 语言开发 (八) 进程基础

Linux C到Android App开发推荐链接(入门十二章):

开源 java android app 开发(一)开发环境的搭建_csdn 开源 java android app-CSDN博客

开源 java android app 开发(一)开发环境的搭建-CSDN博客

开源 java android app 开发(二)工程文件结构-CSDN博客

开源 java android app 开发(三)GUI界面布局和常用组件-CSDN博客

开源 java android app 开发(四)GUI界面重要组件-CSDN博客

开源 java android app 开发(五)文件和数据库存储-CSDN博客

开源 java android app 开发(六)多媒体使用-CSDN博客

开源 java android app 开发(七)通讯之Tcp和Http-CSDN博客

开源 java android app 开发(八)通讯之Mqtt和Ble-CSDN博客

开源 java android app 开发(九)后台之线程和服务-CSDN博客

开源 java android app 开发(十)广播机制-CSDN博客

开源 java android app 开发(十一)调试、发布-CSDN博客

开源 java android app 开发(十二)封库.aar-CSDN博客

linux C到.net mvc开发推荐链接:

开源C# .net mvc 开发(一)WEB搭建_c#部署web程序-CSDN博客

开源 C# .net mvc 开发(二)网站快速搭建_c#网站开发-CSDN博客

开源 C# .net mvc 开发(三)WEB内外网访问(VS发布、IIS配置网站、花生壳外网穿刺访问)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-CSDN博客

开源 C# .net mvc 开发(四)工程结构、页面提交以及显示_c#工程结构-CSDN博客

开源 C# .net mvc 开发(五)常用代码快速开发_c# mvc开发-CSDN博客

主要内容:讲述linux中的文件IO和标准IO的区别

目录:

1.基本介绍

2.函数介绍

3.综合代码

4.效果演示

一、基本介绍

文件 IO 是 Linux 系统提供的接口, 针对文件和磁盘进行操作, 不带缓存机制; 标准 IO 是 C 语言函数库里的标准 I/O 模型, 在 stdio.h 中定义, 通过缓冲区操作文件, 带缓存机制。 Linux 系统中一切皆文件, 包括普通文件, 目录, 设备文件(不包含网络设备) , 管道, fifio 队列, socket 套接字等, 在终端输入“ls -l”可查看文件类型和权限。
标准 IO 和文件 IO 常用 API 如下:

标准 IO文件 IO
打开/创建fopenopen
getc,fgetc,getchar,fgets,gets, freadread
putc,fputc,putc,fputs,puts, fwritewrite
关闭fcloseclose

区别图展示

文件 IO 是直接调用内核提供的系统调用函数(linux), 头文件是 unistd.h, 标准 IO 是间接调用系统调用函数(系统都可以),头文件是 stdio.h,
 

二、函数介绍

open

函数int open(const char *pathname, int flags) int open(const char *pathname, int flags, mode_t mode)
头文件#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>
参数 pathname路径和文件名
参数 flags文件打开方式, 可用多个标志位按位或设置
参数 mode权限掩码, 对不同用户和组设置可执行, 读, 写权限, 使用八进制数表示, 此参数可不写
返回值open()执行成功会返回 int 型文件描述符, 出错时返回-1。
作用通过系统调用, 可以打开文件, 并返回文件描述符

read

函数ssize_t read(int fd, void *buf, size_t count)
头文件#include <unistd.h>
参数 fd要读的文件描述符
参数 buf缓冲区, 存放读到的内容
参数 count每次读取的字节数
返回值返回值大于 0, 表示读取到的字节数;等于 0 在阻塞模式下表示到达文件末尾或没有数据可读(EOF) , 并调用阻塞;等于-1 表示出错, 在非阻塞模式下表示没有数据可读。

write

函数ssize_t write(int fd, const void *buf, size_t count);
头文件#include <unistd.h>
参数 fd文件描述符;
参数 buf缓存区, 存放将要写入的数据
参数 count每次写入的个数
功能每次从 buf 缓存区拿 count 个字节写入 fd 文件。
返回值大于或等于 0 表示执行成功, 返回写入的字节数;返回-1 代表出错

close

函数int close(int fd)
头文件#include <unistd.h>
参数 fd文件描述符
返回值成功返回 0; 错误返回-1

三、综合代码

功能:打开文件1和文件2,如果文件1不为空,将文件1的前32个字符写入文件2,最后关闭。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
//步骤一: 判断命令行的参数
if(argc != 3)
{
printf("Usage:%s <src file> <obj file>\n", argv[0]);
} 
// 步骤二: 定义变量
int fd_src;
int fd_obj;
char buf[32] = {0};
ssize_t ret;
// 步骤三: 打开文件获得文件描述符
fd_src = open(argv[1], O_RDWR);
if (fd_src < 0)
{
printf("open is error\n");
return -1;
} 
fd_obj = open(argv[2], O_CREAT | O_RDWR, 0666);
if (fd_obj < 0)
{
printf("open is error\n");
return -2;
} 
// 步骤四: 读写操作
while((ret=read(fd_src,buf,32))!=0)
{
write(fd_obj,buf,ret);
} 
// 步骤五: 关闭文件描述符
close(fd_src);
close(fd_obj);
return 0;
}

四、实际效果

编译文件

运行main,1.txt的内容拷贝到2.txt。


文章转载自:

http://CivBLjmF.knrgb.cn
http://bNOO3Sq6.knrgb.cn
http://iXos0A1B.knrgb.cn
http://MvhGZieu.knrgb.cn
http://JZVIMJUa.knrgb.cn
http://C8RO4REA.knrgb.cn
http://MxYPNcbC.knrgb.cn
http://hyf811c1.knrgb.cn
http://I4YUtBlk.knrgb.cn
http://SIciwFsV.knrgb.cn
http://DqDIfR8f.knrgb.cn
http://XQ9K0fQD.knrgb.cn
http://equ0xzdA.knrgb.cn
http://Mbe5JjQh.knrgb.cn
http://fGIX4eoi.knrgb.cn
http://uRApOdM5.knrgb.cn
http://i0Vh74ws.knrgb.cn
http://lzsAvtPC.knrgb.cn
http://RmVTC2Jz.knrgb.cn
http://zZMERrmy.knrgb.cn
http://QU36AD8s.knrgb.cn
http://z42oplfj.knrgb.cn
http://n7BBHaCw.knrgb.cn
http://nv4CM9Pp.knrgb.cn
http://AF036ouZ.knrgb.cn
http://jFGdezNn.knrgb.cn
http://AJYGSFr8.knrgb.cn
http://6F4OI9uK.knrgb.cn
http://nCLDsRie.knrgb.cn
http://2f1XpNCA.knrgb.cn
http://www.dtcms.com/a/380849.html

相关文章:

  • Java Servlet 完全解析:构建高效 Web 应用的关键技术
  • 【GIS】Cesium:快速加载地图
  • 【硬件-笔试面试题-92】硬件/电子工程师,笔试面试题(知识点:米勒效应,米勒平台)
  • 定点巡检、实时巡检详解和两者的区别对比
  • AI 编程工具选型速览(2025-09 版)
  • 2025年渗透测试面试题总结-66(题目+回答)
  • DOTA-Cys-Tyr-Leu-Ala-Ser-Arg-Val-His-Cys(一对二硫键)
  • ARPO: End-to-End Policy Optimization for GUI Agents with Experience Replay
  • 数模电2,9.12
  • 51c大模型~合集181
  • 【硬件-笔试面试题-89】硬件/电子工程师,笔试面试题(知识点:线性稳压电源LDO的效率计算)
  • Docker基础篇03:Docker常用命令
  • 【数据结构与算法Trip第3站】双指针
  • html实现右上角有个图标,鼠标移动到该位置出现手型,点击会弹出登录窗口。
  • mqtt学习笔记
  • C# DataGridView表头自定义设置全攻略
  • 《深入理解Java虚拟机》第三章读书笔记:垃圾回收机制与内存管理
  • 二叉树的最大深度
  • MySQL数据库-02(SQL语言基础)
  • Java POI实现对docx文件搜索指定文本进行批注/评论
  • Hugging Face NLP课程学习记录 - 3. 微调一个预训练模型
  • Java IO流(字节流和字符流)
  • Python 操作Office的PPT、Word、Excel,同时兼容WPS
  • SW - 剖面视图不显示剖面的显示选项
  • 基于STM32设计的智能蜂箱监测系统设计
  • 将Ansible与这些监控工具集成,实现自动化运维
  • USB3.0 Type C IO介绍
  • cuda编程笔记(19)-- Transformer注意力机制的实现
  • Pot Translator,跨平台划词翻译与OCR工具
  • Java面试指南——当对象开启“变形记”:序列化反序列化