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

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.lryc.cn/news/249015.html

相关文章:

  • iptables防火墙之SNAT与DNAT
  • Python与设计模式--命令模式
  • uni-app 自带返回方法onBackPress,返回上一级并且刷新页面内容获取最新的数据
  • python用YOLOv8对图片进行分类
  • Spring中@DependsOn 使用详解
  • android笔记 SELinux
  • vue3 keep-alive页面切换报错:parentComponent.ctx.deactivate is not a function
  • prompt提示
  • 边缘计算网关:智能制造的“智慧大脑”
  • HNCTF2022Week1 Reverse WP
  • 基于Python的面向对象分类实例Ⅱ
  • android手机莫名其妙卸载重装有残留数据
  • 【YOLOv5入门】目标检测
  • 可验证随机函数(VRF)
  • Node.js与npm的准备与操作
  • ui设计师简历自我评价的范文(合集)
  • sqli-labs靶场详解(less32-less37)
  • 如何保证缓存和数据库的双写一致性?
  • Rosbag 制作 TUM数据集
  • 本地websocket服务端暴露至公网访问【cpolar内网穿透】
  • 男UI设计师主要是做什么的优漫教育
  • 超实用!Spring Boot 常用注解详解与应用场景
  • 【古月居《ros入门21讲》学习笔记】11_客户端Client的编程实现
  • 小程序和Vue写法的区别主要有什么不同
  • Flutter之MQTT使用
  • vr红色教育虚拟展馆全景制作提升单位品牌形象
  • 【Spring】Spring是什么?
  • 事件循环机制及常见面试题
  • 智能监控平台/视频共享融合系统EasyCVR接入RTSP协议视频流无法播放原因是什么?
  • c# statusStrip 显示电脑主机名、IP地址、MAC地址