笔记整理—内核!启动!—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.xdnf.cn/news/147739.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

关于自动化测试的一点了解

一 自动化测试基础的认识 1)首先,什么是自动化测试? 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的过程一步步执行测试,得到实…

史上最全!!!大厂面试真题-SpringBoot自动装配的原理是什么?

我想你也在真实面试中被问过无数次这个问题了,我也是,但是不管你怎么搜,都只有那几篇八股文的答案,你问GPT它都解释不清楚,我决定自己写一篇详细的,避免遗忘也想帮助一下患难中的兄弟姐妹们,能把…

struct的精确用法

目录 我终于回来啦! 1,可以创造根据结构体格式的成员或数组。 普通成员 数组成员 2,可以用指针遍历成员 3,使用typedef --------------------------------------------------------------------------------------------------------------------------------…

代码随想录Day 52|题目:101.孤岛的面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 图论part03题目一:101.孤岛的总面积解题思路DFS**BFS** 题目二:102. 沉没孤岛解题思路 题目三:103. 水流问题解题思路优化 题目四:104.建造最大岛屿…

[Linux]用户管理指令

开机/重启/登录/注销 进入xhsell 或者虚拟系统中, 右键桌面打开终端, 在终端执行命令, 重启或关机linux系统 建议使用普通账号登录, 如果权限不够时, 使用 su - 用户名 命令切换到超管, 然后再使用 logout命令退回到普通账号, logout 不能在图形界面的终端中使用 用户管理 Li…

Centos7.9 使用 Kubeadm 自动化部署 K8S 集群(一个脚本)

文章目录 一、环境准备1、硬件准备(虚拟主机)2、操作系统版本3、硬件配置4、网络 二、注意点1、主机命名格式2、网络插件 flannel 镜像拉取2.1、主机生成公私钥2.2、为啥有 Github 还用 Gitee2.3、将主机公钥添加到 Gitee2.3.1、复制主机上的公钥2.3.2、…

最佳植树距离 - 华为OD统一考试(E卷)

2024华为OD机试(C卷D卷E卷)最新题库【超值优惠】Java/Python/C合集 题目描述 按照环保公司要求,小明需要在沙化严重的地区进行植树防沙工作,初步目标是种植一条直线的树带。由于有些区域目前不适合种植树木,所以只能在…

电脑提示找不到msvcp110.dll怎么办?全方面详细解答

msvcp110.dll 是 Microsoft Visual C 2012 Redistributable Package 中的一个动态链接库文件。它是运行使用 Visual C 2012 开发的应用程序所必需的,包含了许多 C 标准库函数的实现。这些函数主要用于支持字符串处理、内存管理、输入输出流、异常处理等功能。 1.ms…

Clion使用vcpkg管理C/C++包

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Clion安装vcpkg二、使用步骤1.切换到清单模式2.开始安装包 三、测试代码总结 前言 Linux上的库基本都可以通过apt或yum等包管理工具来在线安装包&#xff…

C语言深入理解指针(四)

目录 字符指针变量数组指针变量数组指针变量是什么数组指针变量怎么初始化 二维数组传参的本质函数指针变量函数指针变量的创建函数指针变量的使用代码typedef关键字 函数指针数组转移表 字符指针变量 字符指针在之前我们有提到过,(字符)&am…

NLP 文本分类核心问题

解决思路 分解为多个独立二分类任务将多标签分类转化为多分类问题更换 loss 直接由模型进行多标签分类 数据稀疏问题 标注更多数据,核心解决方案: 自己构造训练样本 数据增强,如使用 chatGPT 来构造数据更换模型 减少数据需求增加规则弥补…

MELON的难题- 华为OD统一考试(E卷)

2024华为OD机试(C卷D卷)最新题库【超值优惠】Java/Python/C合集 题目描述 MELON 有一堆精美的雨花石(数量为 n,重量各异),准备送给 S和 W,MELON 希望送给俩人的雨花石重量是一致的。请你设计一…

爬虫 ----hook

目录 定义: 了解什么是hook? 举例 hook XHR请求 XMLHttpRequest 案例地址: Interceptors-拦截器 HOOK cookie操作 cookie 示范 常见的hook代码总结 1.Hook Cookie 2.Hook Header 3.Hook URL 4.Hook JSON.stringify 5.Hook JSON.parse 6.Ho…

Mac使用gradle编译springboot-2.7.x源码

1 开发环境: JDK8 ideaIU-2024.2.2 gradle-7.6.3 代理网络 2 下载springboot源码 代码仓库网址 git clone -b 2.7.x https://github.com/spring-projects/spring-boot.git3 安装gradle gradle下载网址 https://services.gradle.org/distributions/ 安装此文件指…

C语言 | Leetcode C语言题解之第415题字符串相加

题目: 题解: char* addStrings(char* num1, char* num2) {int i strlen(num1) - 1, j strlen(num2) - 1, add 0;char* ans (char*)malloc(sizeof(char) * (fmax(i, j) 3));int len 0;while (i > 0 || j > 0 || add ! 0) {int x i > 0 ?…

lsof可以查看当前系统中正在被使用的文件,包括动态库

lsof的英文是 list open files lsof直接回车,会显示很多,可以配合more命令查看 lsof | more -10 sudo lsof | more -20 lsof查看正在使用某个动态库的进程 lsof /lib/x86_64-linux-gnu/libc.so.6 lsof /usr/lib/x86_64-linux-gnu/libc.so.6 l…

如何优化苹果CMS 泛目录的缓存管理?

在使用苹果CMS进行内容管理时,缓存管理是提升网站性能的重要环节。随着技术的不断发展,泛目录插件的缓存机制也逐渐变得不再必要。(maccmscn)本文将探讨如何在不使用缓存的情况下,优化苹果CMS泛目录的性能,…

(学习记录)使用 STM32CubeMX——配置时钟(入门)

使用STM32CubeMX配置STM32F103C8T6时钟部分 选择芯片 ①:选择MCU型号 ①:这里使用英文输入法,输入你想要的芯片型号,我这里采用STM32F103C8T6 ②:这里能看到搜索后出来的芯片具体型号,选择匹配度最高的一个…

MySQL-排名函数ROW_NUMBER(),RANK(),DENSE_RANK()函数的异同

MySQL-排名函数ROW_NUMBER(),RANK(),DENSE_RANK()函数的异同 前言 假设有如下表结构与数据,class_id表示班级,需求:现在要按照班级分组,每个班级的学生进行年龄从小到大排序 一、ROW_NUMBER()函数 ROW_NUM…

Linux中的调度算法

nice值的范围有限,即为[-20, 19],也就是40个数字,优先级为[60, 99]即一共40个优先级 目前谈论的Linux操作系统叫做分时操作系统,调度的时候主要强调公平,还有一种是实时操作系统,比如智能汽车里面必须装有这…