Linux下的文件IO之系统IO

1. 知识点

读入写出,切记以我们程序为中心向文件或者别的什么东西读入写出(输入流输出流)

人话就是

文件向我们程序就是读入

程序向文件或者别的什么就是写出

2. open打开文件

open.c

/*************************************************************************> File Name: open.c> Author: lsf> Mail: lsf_2012@163.com > Created Time: 2023年10月20日 星期五 10时30分06秒************************************************************************/#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>//使用open函数
int main()
{//打开文件---1.txt文件存在int fd1 = open("./1.txt",O_RDWR);//创建文件int fd2 = open("./2.txt",O_RDWR | O_CREAT,0777);printf("fd1 = %d   fd2 = %d\n",fd1,fd2);//关闭文件close(fd1);close(fd2);return 0;
}

3. read读入文件

read.c

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>//使用read函数
int main()
{//打开文件---1.txt文件存在int fd1 = open("./1.txt",O_RDWR);char buf[10]={0};//读文件while(1){memset(buf,0,sizeof(buf));//清空缓存区ssize_t ret = read(fd1,buf,sizeof(buf)-1);printf("%s",buf);if(ret==0){break;}}//关闭文件close(fd1);return 0;
}

3.2 实现cat函数

cat.c

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>//自己写一个cat函数int main(int argc, char **argv)//cat.out   1.txt     2.txt  3.txt  4.txt
{                              //argv[0]  argv[1] argv[2]if(argc == 1){printf("请给我至少一个文件的路径\n");return 0;}int i;for(i=1;i<argc;i++){int fd1 = open(argv[i],O_RDWR);char buf[10] = {0};while(1){memset(buf,0,sizeof(buf));//内存重置,清空bzero(buf,sizeof(buf));ssize_t n = read(fd1,buf,sizeof(buf)-1);printf("%s",buf);//退出条件if(n == 0){close(fd1);break;}}}
}

4. write写出文件

write.c

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>//使用write函数实现文件的复制int main()
{int fd1 = open("./1.txt",O_RDONLY);int fd2 = open("./2.txt",O_WRONLY|O_CREAT,0777);char buf[10];//文件的复制while(1){//内存清空memset(buf,0,sizeof(buf));//读文件ssize_t n = read(fd1,buf,sizeof(buf)-1);//写文件write(fd2,buf,strlen(buf));if(n==0){close(fd1);close(fd2);break;}}return 0;
}

5. lseek光标函数

lseek.c

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>//使用lseek函数int main()
{int fd1 = open("./4.txt",O_RDWR|O_CREAT,0777);char buf[12] = "hello world";char buf2[12];//写文件write(fd1,buf,strlen(buf));lseek(fd1,0,SEEK_SET);//使光标复位到起始为止//读文件memset(buf2,0,sizeof(buf2));//清空缓存区read(fd1,buf2,sizeof(buf2));printf("%s\n",buf2);close(fd1);return 0;
}

6. perror错误打印函数

7. 练习

7.1 自我实现多个文件一起复制 copy函数

my_copy.c

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>//自我实现copy函数int main(int argc, char **argv)
{if(argc == 1){printf("请给我至少一个文件的路径\n");return 0;}int i=0;for(i=1;i<argc;i+=2){int fd1 = open(argv[i],O_RDONLY);int fd2 = open(argv[i+1],O_WRONLY|O_CREAT,0777);char buf[12];//文件的复制while(1){//内存清空memset(buf,0,sizeof(buf));//读文件ssize_t n = read(fd1,buf,sizeof(buf)-1);//写文件write(fd2,buf,strlen(buf));if(n==0){close(fd1);close(fd2);break;}}}return 0;
}

7.2 自我实现两个文件的比较diff函数

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>//自我实现diff函数int main(int argc,char** argv)
{if(argc == 1){printf("请给我至少一个文件的路径\n");return 0;}//打开两个文件int fd1 = open(argv[1],O_RDONLY);int fd2 = open(argv[2],O_RDONLY);char buf1[5] = {0};char buf2[5] = {0};int flag = 0;//两文件相同while(1){//读取文件memset(buf1,0,sizeof(buf1));memset(buf2,0,sizeof(buf2));ssize_t n1 = read(fd1,buf1,sizeof(buf1)-1);ssize_t n2 = read(fd2,buf2,sizeof(buf2)-1);//比较读取出来的bufif(strcmp(buf1,buf2)!=0){flag = 1;//不同break;}if(n1==0){close(fd1);break;}if(n2==0){close(fd2);break;}}//至此if(flag){printf("两个文件不同\n");}else{printf("两文件相同\n");}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/208224.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

05_MySQL主从复制架构

任务背景 ##一、真实案例 某同学刚入职公司&#xff0c;在熟悉公司业务环境的时候&#xff0c;发现他们的数据库架构是一主两从&#xff0c;但是两台从数据库和主库不同步。询问得知&#xff0c;已经好几个月不同步了&#xff0c;但是每天会全库备份主服务器上的数据到从服务…

5G承载网和大客户承载的演进

文章目录 移动4/5G承载网联通和电信4/5G承载网M-OTN&#xff08;Metro-optimized OTN&#xff09;&#xff0c;城域型光传送网PeOTN&#xff08;packet enhanced optical transport network&#xff09;&#xff0c;分组增强型OTN板卡增强型PeOTN集中交叉型PeOTN VC-OTN&#x…

2023-12-01 LeetCode每日一题(找出叠涂元素)

2023-12-01每日一题 一、题目编号 2661. 找出叠涂元素二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。arr 和 mat 都包含范围 [1&#xff0c;m * n] 内的 所有 整数。 从下标 0 开始遍历 arr 中的每…

750mA Linear Charger with Power Path Management

一、General Description YHM2711 is a highly integrated, single-cell Li-ion battery charger with system power path management for space-limited portable applications. The full charger function features Trickle-charge, constant current fast charge and const…

Linux中的UDEV机制与守护进程

Linux中的UDEV守护进程 udev简介守护进程守护进程概念守护进程程序设计守护进程的应用守护进程和后台进程的区别 UDEV的配置文件自动挂载U盘 udev简介 udev是一个设备管理工具&#xff0c;udev以守护进程的形式运行&#xff0c;通过侦听内核发出来的uevent来管理/dev目录下的设…

CPU 使用率和负载Load

优质博文&#xff1a;IT-BLOG-CN 一、CPU 使用率 CPU使用率是 CPU处理非空闲任务所花费的时间百分比 。例如单核CPU 1s内非空闲态运行时间为0.8s&#xff0c;那么它的CPU使用率就是80%&#xff1b;双核CPU 1s内非空闲态运行时间分别为0.4s和0.6s&#xff0c;那么&#xff0c;…

MySQL之锁

MySQL之锁 锁是计算机在执行多线程或线程时用于并发访问同一共享资源时的同步机制&#xff0c;MySQL中的锁是在服务器层或者存储引擎层实现的&#xff0c;保证了数据访问的一致性与有效性 MySQL锁可以按模式分类为&#xff1a;乐观锁与悲观锁。 按粒度分可以分为全局锁、表级锁…

Pandas教程06:DataFrame.merge数据的合并处理

DataFrame.merge() 是 pandas 库中用于合并两个DataFrame数据的方法。该方法主要用于根据一个或多个键&#xff08;键可以是列名或索引&#xff09;将两个 DataFrame 连接在一起&#xff0c;这个过程类似于 SQL 中的 JOIN 操作。 #我的Python教程 #微信公众号&#xff1a;wdPy…

opencv知识库:利用cv2.resize()函数进行图像缩放

引言 在numpy知识库&#xff1a;深入理解numpy.resize函数和数组的resize方法中&#xff0c;小编较为详细地探讨了numpy的resize函数背后的机理。从结果来看&#xff0c;numpy.resize函数并不适合对图像进行缩放操作。而opencv中的resize函数虽然和numpy的resize函数同名&…

高校学生宿舍公寓报修维修生活管理系统 微信小程序b2529

本课题要求实现一套基于微信小程序宿舍生活管理系统&#xff0c;系统主要包括&#xff08;管理员&#xff0c;学生、维修员和卫检员&#xff09;四个模块等功能。 使用基于微信小程序宿舍生活管理系统相对传统宿舍生活管理系统信息管理方式具备很多优点&#xff1a;首先可以大幅…

AI与控制(二)从优化到最优控制,从动态规划到强化学习--1

优化问题&#xff0c;尤其静态优化问题&#xff0c;在控制系统设计中随处可见&#xff0c;例如基于燃油经济性和驾驶体验的多目标优化的汽车发动机 MAP 标定&#xff0c;基于性能指标优化的飞行器结构设计参数优化&#xff0c;以实验数据与模型输出匹配为目标的电池 RC 等效电路…

hbase Master is initializing

问题如下&#xff1a; ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializingat org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2452)at org.…

C++二维数组名到底代表个啥

题目先导 int a[3][4]; 则对数组元素a[i][j]正确的引用是*(*(ai)j)先翻译一下这个*(*(ai)j)&#xff0c;即a后移i解引用&#xff0c;再后移j再解引用&#xff0c;这么看来a就应该是个二维数组&#xff0c;第一层存储行向量&#xff0c;一次解引用获得行向量的地址&#xff0c;…

PaddleOCR学习笔记

Paddle 功能特性 PP-OCR系列模型列表 https://github.com/PaddlePaddle/PaddleOCR#%EF%B8%8F-pp-ocr%E7%B3%BB%E5%88%97%E6%A8%A1%E5%9E%8B%E5%88%97%E8%A1%A8%E6%9B%B4%E6%96%B0%E4%B8%AD PP-OCR系列模型列表&#xff08;V4&#xff0c;2023年8月1日更新&#xff09; 配置文…

【阿里云】图像识别 智能分类识别 增加网络控制功能点(三)

一、增加网络控制功能 实现需求TCP 心跳机制解决Soket异常断开问题 二、Linux内核提供了通过sysctl命令查看和配置TCP KeepAlive参数的方法。 查看当前系统的TCP KeepAlive参数修改TCP KeepAlive参数 三、C语言实现TCP KeepAlive功能 四、setsockopt用于设置套接字选项的系…

基于STM32的四轴飞行器的控制系统(论文+源码)

1.系统设计 本次基于stm32单片机的四轴飞行器控制系统主要包括硬件和软件这两大部分&#xff0c;其中硬件部分是基于单片机的四轴飞行器控制系统实现的基石&#xff0c;其中主要STM32单片机负责整个系统功能的实现&#xff1b;NRF24L01无线模块负责对四轴飞行器的远程控制&…

【蓝桥杯软件赛 零基础备赛20周】第5周——高精度大数运算与队列

文章目录 1. 数组的应用–高精度大数运算1.1 Java和Python计算大数1.2 C/C高精度计算大数1.2.1 高精度加法1.2.2 高精度减法 2. 队列2.1 手写队列2.1.1 C/C手写队列2.1.2 Java手写队列2.1.3 Python手写队列 2.2 C STL队列queue2.3 Java队列Queue2.4 Python队列Queue和deque2.5 …

1688API接口系列,1688开放平台接口使用方案(商品详情数据+搜索商品列表+商家订单类)

1688商品详情接口是指1688平台提供的API接口&#xff0c;用于获取商品详情信息。通过该接口&#xff0c;您可以获取到商品的详细信息&#xff0c;包括商品标题、价格、库存、描述、图片等。 要使用1688商品详情接口&#xff0c;您需要先申请1688的API权限&#xff0c;并获取ac…

仿京东淘宝商品列表筛选组件:实现一个高效的侧边栏弹框筛选功能

仿京东淘宝商品列表筛选组件&#xff1a;实现一个高效的侧边栏弹框筛选功能 一、引言 随着电子商务的快速发展&#xff0c;用户体验成为了竞争的关键因素。在众多的电商网站中&#xff0c;如京东和淘宝&#xff0c;商品列表筛选功能为用户提供了便捷的途径来找到心仪的商品。本…

Clion+Ubuntu(WSL)+MySQL8.0开发环境搭建

1. 下载 MySQL 源码 访问 MySQL 官方网站&#xff08;MySQL :: Download MySQL Community Server&#xff09;并下载 MySQL 8.0 的源码包&#xff08;mysql-boost-8.0.31.tar.gz&#xff09;。 2. 安装编译依赖 1&#xff09;更换镜像源 参考&#xff1a;Linux Ubuntu 修改…