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

笔记整理—内核!启动!—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.kler.cn/a/319908.html

相关文章:

  • PCL 新增自定义点类型【2025最新版】
  • 浅谈云计算21 | Docker容器技术
  • PDF文件提取开源工具调研总结
  • LabVIEW实车四轮轮速信号再现系统
  • TinyEngine v2.1版本发布:全新的区块方案和画布通信方案,打造更强力的可拓展低代码引擎
  • 卷积神经05-GAN对抗神经网络
  • 栈的基本概念和及具体实现
  • 入门Django
  • 研究生学习阶段小结
  • 市面第一款 C++ 版本的U盘装机软件(即将上线)
  • 《C++中的随机数生成器:探索随机之美》
  • 【2.使用VBA自动填充Excel工作表】
  • 基于 STM32 和 Modbus 协议的公路隧道照明环境数据采集系统设计
  • 技能深化与软实力双提升
  • TLC/TK Adv学习笔记1 - Py版本+美化
  • HarmonyOS鸿蒙开发实战(5.0)多文件下载监听应用案例实践
  • 快速排序(C语言实现)
  • linux命令记录 ss 和 lsof
  • 【Mysql多数据源实现读写分离的几种方案】
  • 【Python 基础学习笔记】文件的基础操作
  • [Redis][主从复制][中]详细讲解
  • 2024网安周 | 百度安全深度参与,探索人工智能与数字安全的融合发展之路
  • 【SQL】产品分组销售
  • 前端开发——(1)使用vercel进行网页开发
  • vue路由的基本使用
  • Linux-L14-Linux中把用户加入到管理者root中