如何理解Linux文件IO?

一、文件IO的概述
1、什么是文件?
Linux下一切皆文件。普通文件、目录文件、管道文件、套接字文件、链接文件、字符设备文件、块设备文件。
2、什么是IO?
input  output:输入输出
3、什么是文件IO?
对文件的输入输出,把数据写入文件/从文件中读取数据
系统IO:系统调用的IO接口。(open、close、read、write、lseek、mmap、munmap)
标准IO:基于标准C库的IO接口
二、系统IO函数的应用
Linux下的man手册的使用:man  man
第一节:查可执行程序:man 1 ls
第二节:查系统调用的函数:man 2 open
第三节:查库调用的函数:man 3 printf

- open  打开文件
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>

int open(const char *pathname, int flags);  int open(const char *pathname, int flags, mode_t mode); 返回值类型:int
返回值:
打开文件成功,返回一个新的文件描述符,>=0(相当于人的身份证号)
打开文件失败,返回-1
形参:
pathname:要打开的文件的路径名
flags:打卡文件的方式
O_RDONLY  只读
O_WRONLY 只写
O_RDWR     可读可写
以上三种方式互斥
O_APPEND:以追加方式打开文件。
O_CREAT:如果要打开的文件不存在,系统就创建该文件并打开。
O_TRUNC:如果要打开的文件中已有数据,那就打开文件并清除已有的数据。
mode:用于指定新建文件的权限,用八进制表示。

- close 关闭文件函数
 #include <unistd.h>   int close(int fd); 返回值类型:int
返回值:
关闭文件成功,返回0
关闭文件失败,返回-1
形参
fd:要关闭的文件的文件描述符

练习:编写代码,实现在共享目录中,打开1.txt文件,并打印出文件描述符,再关闭文件。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>int main()
{//打开文件int fd1;fd1 = open("./1.txt",O_RDWR);if(fd1 == -1){printf("open 1.txt failed!\n");return -1;}printf("fd1 = %d\n",fd1);close(fd1);return 0;
}/*
fd1 = 3;
文件描述符是从3开始的,为什么会这样?不是说文件描述符>=0?
其实系统会默认打开三个标准流控,0,1,2就会被占用
0 ---> 标准输入   stdin
1 ---> 标准输出   stdout
2 ---> 标准错误   stderr
所以当我们自己用open函数打开文件时,文件描述符是从3开始的
*/


- lseek   偏移文件指针

 #include <sys/types.h>#include <unistd.h>off_t lseek(int fd, off_t offset, int whence); 返回值类型:off_t (整形)


返回值:
         偏移成功,返回偏移字节数
         偏移失败,返回-1
形参一:fd  文件描述符
形参二:偏移量
形参三:偏移位置
         SEEK_SET   从头位置开始偏移
         SEEK_CUR  从当前位置开始偏移
         SEEK_END  从末尾位置开始偏移
练习2:编写代码,实现在1.txt文件中写入"hello world",再从该文件中读取5个字节数据,并打印出来。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>int main(void)
{//1.打开文件int fd = open("./1.txt", O_RDWR|O_CREAT);if (fd == -1){printf("open  1.txt failed!\n");return -1;}//2.写入数据char wr_buf[15] = "hello world";write(fd, wr_buf, 11);    //3.读取数据char rd_buf[15] = {0};lseek(fd, 0, SEEK_SET);read(fd, rd_buf,5);printf("%s\n", rd_buf);//4.关闭文件close(fd);return 0;
}

作业:实现一个简单文件拷贝功能,将文件1的数据拷贝到文件2,如果文件2不存在则创建,如果文件2中已有数据则清除。

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

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

相关文章

蓝桥杯刷题(九)

1.三国游戏 代码 #输入数据 nint(input()) Xlilist(map(int,input().split())) Ylilist(map(int,input().split())) Zlilist(map(int,input().split())) #分别计算X-Y-Z/Y-Z-X/Z-X-Y并排序 newXli sorted([Xli[i] - Yli[i] - Zli[i] for i in range(n)],reverseTrue) newYli …

CASA模型在陆地生态系统碳循环研究中的应用探讨

植被&#xff0c;作为陆地生态系统的重要基石&#xff0c;对维护生态环境功能具有不可替代的作用。其中&#xff0c;植被净初级生产力&#xff08;NPP&#xff09;是衡量植被生态系统健康与功能的关键指标。它反映了单位面积上绿色植被通过光合作用生产的有机质总量在扣除自养呼…

UE5数字孪生系列笔记(二)

智慧城市数字孪生系统 制作流云动画效果 首先添加一个图像在需要添加流云效果的位置 添加动画效果让其旋转 这个动画效果是程序开始就要进行的&#xff0c;所以要在EventConstruct中就可以启动这个动画效果 添加一个一样的图像在这里&#xff0c;效果是从此处进行放大消散 添…

[游戏开发][UE5.3]GAS学习心得

GAS(GameplayAbilitySystem) UE提供的一套技能框架&#xff0c;这个框架也不是万能的&#xff0c;甚至各个部件你要进行封装开发&#xff0c;但这也比你从头写一套技能框架要容易很多。 GAS功能极其强大&#xff0c;所以它是一个庞大的系统&#xff0c;如果想运用得当&#x…

【Linux进程状态】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、直接谈论Linux的进程状态 看看Linux内核源代码怎么说 1.1、R状态 -----> 进程运行的状态 1.2、S状态 -----> 休眠状态(进程在等待“资源”就绪) 1.3、T状…

Java代码基础算法练习-判断字符串是否为回文-2024.03.16

任务描述&#xff1a; 回文串是指一个正读和反读都一样的字符串&#xff0c;比如“level”或者“noon”等。要求输入 一个字符串&#xff0c;判断此字符串是否为回文。&#xff08;注&#xff1a;设字符串长度小于20&#xff09; 任务要求&#xff1a; package suanfa;import…

学python新手如何安装pycharm;python小白如何安装pycharm

首先找到官网&#xff1a; Download PyCharm: The Python IDE for data science and web development by JetBrains 打开后选择下载&#xff0c;下图标红部分 点击exe程序&#xff0c;点击下一步&#xff01; 选择安装路径&#xff0c;下一步 弹出界面全选 选择默认 然后直接…

第三门课:结构化机器学习项目-机器学习策略

文章目录 1 机器学习策略一1.1 为什么是ML策略&#xff1f;1.2 正交化1.3 单一数字评估指标1.4 满足和优化指标1.5 训练、开发及测试集划分1.6 开发集和测试集的大小1.7 什么时候改变开发、测试集和指标&#xff1f;1.8 为什么是人的表现&#xff1f;1.9 可避免偏差1.10 理解人…

IDEA创建Sping项目只能勾选17和21,没有Java8?

解决办法: 替换创建项目的源 我们只知道IDEA页面创建Spring项目&#xff0c;其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https://start.spring.io/或者http://start.springboot.io/替换为 https://start.aliyun.com/

python的小技巧一

文章目录 python的小技巧系列1、变量相关变量交换三元运算符一个数值的范围比较有的场景下使用 try...exception 代替if...else 2、字符串相关格式化连接字符串的分割字符串的连接 3、生成器4、列表相关取最后一个元素判断列表是否为空列表合并去除列表中的重复值判断某个值是包…

python知识点总结(一)

这里写目录标题 一、什么是WSGI,uwsgi,uWSGI1、WSGI2、uWSGI3、uwsgi 二、python中为什么没有函数重载&#xff1f;三、Python中如何跨模块共享全局变量?四、内存泄露是什么?如何避免?五、谈谈lambda函数作用?六、写一个函数实现字符串反转&#xff0c;尽可能写出你知道的所…

lua脚本的基础内容

官方地址&#xff1a;http://luajit.org/ 官方wiki地址&#xff1a;http://wiki.luajit.org/Home 推荐书籍&#xff1a; OpenResty 最佳实践&#xff1a;https://moonbingbing.gitbooks.io/openresty-best-practices/content/ lua基础文档&#xff1a;https://www.runoob.com/l…