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

笔记整理—内核!启动!—linux应用编程、网络编程部分(3)文件共享与标准IO

        文件共享是指同一个文件被多个独立的读写进行操作。同一个文件为同一个inode,同一个pathname也就是同一个静态文件。同时进行操作,打开一个文件未关闭又被另一个操作打开。文件共享的方式可以实现高效的大文件读写。

        文件共享的三种方式:①同一个进程多个open。②不同进程同时打开文件open(可能为同一个fd数字)。③dup与dup2 API函数,用于复制文件描述符实现接续(指向同一个文件表,用同一个lseek)。

        fd最早的起始数字为0,此后以此增加。fd可以因close()被释放,系统会进行重新分配。fd在进程中0、1、2默认被系统占用。用户得到的最小fd为3。fd0~2分别为stdin、stdout、stderr,也就是标准输入、标准输出、标准错误。fprintf()可以指定输出到某个fd中。

        dup与dup2函数:

fd1=open(FILENAME,O_RDWR|O_TRUNC,0644);
fd2=dup(fd1);此时的fd1=3,fd2=4 但是指向同一个lseek。

        dup不饿指定新文件描述符的数字,dup2修复了这个问题。

fd2=dup2(fd1,16);
dup2所实现的lseek也是同一个,write与read是接续的

        当close(0)或者1.2后可以重新使用dup(0~2)打开,实现标准输入/输出/错误的重定位。

close(1);
设fd1指向1.txt文件
fd2=dup(fd1);
printf("fd2=%d\n",fd2);此时fd2分配fd值为1
fd=1为标准输出,所以printf不会将信息打印在屏幕,而是输出在1.xtx文件中

        命令行重定位使用“>”,终端打印默认是stdio(也就是标准输入输入):man2 dup > 1.txt。实现的原理就是close(1)与dup()。

        fcntl()函数,可用于管理文件描述符,本质上fcntl是一个多功能函数。fcntl(fd,cmd,变参...);cmd:F_xxx,例如F_DUPFD复制文件描述符类似dup与dup2,找到一个大于等于变参的数字并返回。使用这个函数要比dup2更好一些,dup2如果指定的数字被占用,会err,而F_DUPFD会去找一个大于等于这个数字的fd。

        C库函数是对API的封装,要比系统提供的一些API好用,API在不同的系统是不通用的,但C库函数是通用的,C库函数具有可移植性,库函数有缓冲区。

        常用的标准IO:fopen、fclose、fwrite、fread、ffulsh等。对于fopen而言为fopen(*path,*mode)。mode有r只读、r+可读/写指向文件头,文件不存在就报错、w只写、w+可读/写,文件不存在则会创建、a指向文件尾、a+可读可写,接续写,不存在就新建。

TILE *fp=NULL;
fp=fopen(FILENAME,a+);
if(NULL==fp)
{perror("fopen");exit(-1);
}
size_t len=-1;
len=fwrite("abcde",1,5,fp);int array[10]={1,2,3,4,5};
len=fwrite(array,sizeof(int),sizeof(array)/sizeof(array[0]),fp);
char buf[100]={0};
memset(buf,0,sizeof(buf));
len=fread(buf,sizeof(char),10,fp);

http://www.lryc.cn/news/446231.html

相关文章:

  • plt常用函数介绍一
  • 基于ExtendSim的 电子制造 仿真模型
  • BGP 路由反射器
  • CSRF高级防御绕过
  • MySQL安装文档-Windows
  • html TAB、table生成
  • 2024!再见前端!
  • 【源码+文档+调试讲解】人事管理系统设计与实现Python
  • 基于注意力机制的图表示学习:GRAPH-BERT模型
  • linux服务器安装原生的php环境
  • 数电学习基础(逻辑门电路+)
  • 【艾思科蓝】Spring Boot实战:零基础打造你的Web应用新纪元
  • C++ 二叉树
  • 初探IT世界:从基础到未来
  • 一区黏菌算法+双向深度学习+注意力机制!SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测
  • 机器翻译之Bahdanau注意力机制在Seq2Seq中的应用
  • MyBatis 入门教程-搭建入门工程
  • CVE-2024-2389 未经身份验证的命令注入
  • C++初阶-list用法总结
  • 【智能大数据分析 | 实验一】MapReduce实验:单词计数
  • Git 版本控制--git restore和git reset
  • DBAPI如何实现插入数据前先判断数据是否存在,存在就更新,不存在就插入
  • 【渗透测试】-灵当CRM系统-sql注入漏洞复现
  • c语言练习题1(数组和循环)
  • 实验3 Hadoop集群运行环境搭建和使用
  • 前端文件上传全过程
  • MySQL中的函数简单总结,以及TCL语句的简单讲解
  • GPS在Linux下的使用(war driving的前置学习)
  • 开发经验总结: 读写分离简单实现
  • MySQL(面试题 - 同类型归纳面试题)