linux高级编程(1)

linux操作系统编程:

实现一个 用户程序 
(1).库函数 --来实现 
(2).系统调用 

也就是说,程序要进行系统调用的话,有直接和间接(通过库函数)两种方式

linux里面对文件的处理:
思想:
      一切皆文件 
      everything is file!

linux中文件类型:

b -- block      -- 块设备文件   --- 硬盘 ---- ls -l /dev/sda 
c -- character  -- 字符设备文件 --- 鼠标 ---- ls -l /dev/input/
d -- directory  -- 目录文件     
- -- regular    -- 普通文件 
l -- link       -- 软连接文件   --- 类似windows的快捷方式  
p -- pipe       -- 管道文件     --- 实现操作系统中 进程间的一些 信息交换(通信)
s -- socket     -- 套接字文件   --- 网络的时候 (进程间的通信)

操作文件基本思路:

文件操作三步骤:
1.打开 
2.读写
3.关闭 

—>

1.打开 -- fopen  //FILE open
2.读写 -- getchar/putchar 
          gets / puts 
          fread / fwrite 
3.关闭 -- fclose 

小结:

总结:
1.两种思路 
  库 
  系统调用 
2.思想 
  一切皆文件 
3.文件的操作基本步骤 
  a.打开 
  b.读写 
  c.关闭 

学习一个函数:

1.函数的名+函数功能 
2.函数的参数的使用 
3.函数的返回值 

补充man手册查看函数:
NAME:        函数名的介绍 以及 功能的简要说明 
SYNOPSIS:    头文件+函数原型 
DESCRIPTION:  函数的使用的细节 ,参数,返回值 
RETURN VALUE: 函数返回值 

man手册作为权威参照,但是用这个来学习一个函数比较困难

流打开函数fopen:

参数:
    @path --要打开的文件的文件名(字符串形式)
    @mode --打开文件的操作模式
        r ---打开文件做读操作
             注意:
             文件必须存在 
             
        r+   打开文件做读写操作
             注意:
             文件必须存在
        w    打开文件做写操作
             注意:
             如果文件已经存在,则会将文件截断为0
             如果文件不 存在,则会创建一个新文件。
             
        w+  打开文件做读写操作
             注意:
             如果文件已经存在,则会将文件截断为0
             如果文件不 存在,则会创建一个新文件。

        a    打开文件做写操作
             注意:
             如果文件已经存在,则在文件末尾进行写入 
             如果文件不存在,则会创建一个新文件。
        a+   
            打开文件做读写操作
             注意:
             如果文件已经存在,则在文件末尾进行写入 
             如果文件不存在,则会创建一个新文件。

       使用w或w+打开文件时,文件会截断为0,也就是文件内容会被删除,如果想要续写文件的话,只能使用a或a+的方式打开

       而使用r+只能打开已经存在的文件,a+却可以创建文件,所以a+的功能相对而言比较强大

返回值:
   成功 FILE * 
   失败 NULL 并且 设置 errno 表明错误原因

流指针:

FILE * fp 
     (1).流
      FILE * fp;//流指针------关联一个文件   
      FILE * 实际上是指向了一块内存空间(缓存,fileno)

FILE实际上是一个结构体,里面存储了指定文件的全部信息,如读写位置,我们写程序时通过流这个媒介来操作文件,以便更灵活的处理

文件描述符:

文件描述符(file descriptor)是一个用于标识打开文件或I/O设备的整数值。

常见的文件描述符包括:

标准输入(stdin):文件描述符为0,宏为STDIN_FILENO,通常用于接收应用程序的输入。

标准输出(stdout):文件描述符为1,宏为STDOUT_FILENO,通常用于输出应用程序的结果。

标准错误(stderr):文件描述符为2,宏为STDERR_FILENO,通常用于输出应用程序的错误信息。

因此,我们在写程序时文件描述符从3开始,依次往下

标准IO:

标准IO处理了很多细节:
    (1).处理缓冲区分配   (缓存--提高效率 --- 慢速 快速)
    (2).读写IO的块长度的优化
    (3).对系统调用进行了封装,内部对应的"文件描述符"

缓冲区:

行缓冲:1k, terminal,主要用于人机交互stdout

        1.遇到\n刷新
        2.缓存区满刷新
        3.程序结束刷新
        4.fflush刷新  fflush(stdout);

全缓冲:4k,主要用于文件的读写

        1.缓存区满刷新
        2.程序结束刷新
        3.fflush来刷新  fflush(fp);

无缓冲:0k  主要用于出错处理信息的输出 stderr 

          不对数据缓存直接刷新(要保证出错第一时间看到)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

轻松上手MYSQL:MYSQL事务隔离级别的奇幻之旅

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL》 💪🏻 制定明确可量化的目标,坚持默默的做事。 ✨欢迎加入探索MYSQL索引数据结构之旅✨ 👋 大家好!文本学习…

国产AI算力训练大模型技术实践

ChatGPT引领AI大模型热潮,国内外模型如雨后春笋,掀起新一轮科技浪潮。然而,国内大模型研发推广亦面临不小挑战。面对机遇与挑战,我们需保持清醒,持续推进技术创新与应用落地。 为应对挑战,我们需从战略高度…

【Linux详解】冯诺依曼架构 | 操作系统设计 | 斯坦福经典项目Pintos

目录 一. 冯诺依曼体系结构 (Von Neumann Architecture) 注意事项 存储器的意义:缓冲 数据流动示例 二. 操作系统 (Operating System) 操作系统的概念 操作系统的定位与目的 操作系统的管理 系统调用和库函数 操作系统的管理: sum 三. 系统调…

matplotlib之常见图像种类

Matplotlib 是一个用于绘制图表和数据可视化的 Python 库。它支持多种不同类型的图形,以满足各种数据可视化需求。以下是一些 Matplotlib 支持的主要图形种类: 折线图(Line Plot): 用于显示数据随时间或其他连续变量的…

【web2】jquary,bootstrap,vue

文章目录 1.jquary:选择器1.1 jquery框架引入:$("mydiv") 当成id选择器1.2 jquery版本/对象:$(js对象) -> jquery对象1.3 jquery的页面加载事件:$ 想象成 window.onload 1.4 jquery的基本选择器:$()里内容…

大模型参数高效微调学习笔记

大模型参数高效微调学习笔记 github地址 billbill链接 1.分类 图中有五个大类: selective(选择性微调):BitFit,Attention Tuningsoft prompts(提示微调):Prompt-tuning&#xff0c…

Android 自定义软键盘实现 数字九宫格

最近项目在对接美团外卖功能 实现外面小哥凭取货码取货 对接完功能后 用户反馈 弹出的软键盘 很难输入 数字太小了 大概是下面这种显示方式 需求 组长说 要不搞一个自定义软键盘吧 数字搞大点 方便外卖员输入数字 我设置了输入EditText的输入格式为Number 还是不行 那就开…

文件夹或文件已在另一程序中打开,找句柄发现是explorer.exe如何解决

1.找到句柄:ctrl alt del打开任务资源管理器 2.注意是选择CPU -> 关联的句柄,而不是概述 如果发现只有explorer.exe,那肯定是不对的,我们先shfit一个一个删除,发现哪个删不掉,再在这里找句柄&#xff0c…

使用MyBatis Generator自动代码生成器简化Java持久层开发

在Web开发中,数据访问层(DAO层)的编码工作往往重复且繁琐,尤其是在处理数据库表与Java对象之间的映射时。MyBatis Generator是一款强大的代码生成工具,它能自动生成DAO接口、Mapper XML文件和实体类,极大地…

pytorch国内镜像源安装及测试

一、安装命令: pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple 二、测试: import torch x torch.rand(5, 3) print(x)

微信小程序入门2

微信开发者工具的安装方法 1.打开微信开发者工具下载页面 在微信小程序管理后台的左侧边栏中选择“开发工具”,然后选择“开发者工具”,即可找到微信开发者工具的下载页面。 2.打开微信开发者工具的下载链接页面 单击“下载” 按钮下载,即…

【软件测试】认识测试

文章目录 1.什么是测试2.软件测试和开发的区别3.优秀的测试人员需要具备的素质 1.什么是测试 软件测试就是验证软件产品特性是否满足用户的需求 产品特性: 功能性能界面易用性 2.软件测试和开发的区别 工作内容 开发以编码为主,而测试以测试为主&…

高考填报志愿不容易,压线考生怎么救?

每年的高考季 就是高考生们水深火热的一大月份,很多考生都会纠结要报考哪些学校,哪些专业好,并非每个学生从小就有明确的目标,很多人到6月份才深思这个问题,此时难免手慌脚乱,更别说一些考生的分数处于一本…

ping命令返回结果实例分析

测试在各相关情况下ping命令回复信息。 网络环境搭建如下图所示: 【1】R1、R2、PC1和PC2没有配置,测试ping命令回复 在路由器没有配置端口IP地址和路由,PC没有配置IP地址、子网掩码和网关的情况下,PC2 ping 192.168.1.1。 在PC没…

代码随想录-Day37

56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:in…

Program-of-Thoughts(PoT):结合Python工具和CoT提升大语言模型数学推理能力

Program of Thoughts Prompting:Disentangling Computation from Reasoning for Numerical Reasoning Tasks github:https://github.com/wenhuchen/Program-of-Thoughts 一、动机 数学运算和金融方面都涉及算术推理。先前方法采用监督训练的形式,但这…

Qt: QPushButton 按钮实现 上图标下文字

效果如下: 实现有如下几种方式: 1. 使用 QPushButton 设置 setStyleSheet 例: ui->recorder->setStyleSheet("QPushButton{"\"border: 1px solid #00d2ff; "\"min-height: 60px; "\"col…

ToolLLM: Facilitating Large Language Models to Master 16000+ Real-world APIs

ToolLLM: Facilitating Large Language Models to Master 16000 Real-world APIs 一、动机 虽然现如今大模型展现出无与伦比的表现,但是其在工具理解和使用方面依然存在不足,即根据用户的指令和意图来使用外部API。这是因为现有的指令微调任务大多数是…

重生奇迹MU 浅析智力妹妹的现状与天赋

早期的重生奇迹MU游戏中,智力系女性角色通常被简称为“奶娘”,因为她们天生就是辅助定位,能够为队友提供很多帮助。那个时代的游戏非常艰难,升级困难,装备和宝石很难获得,使用药品的消耗也非常大。因此&…

深度学习 --- stanford cs231学习笔记五(训练神经网络的几个重要组成部分之二,数据的预处理)

数据的预处理(Data Preprocessing) 2 Data Preprocessing数据的预处理 数据预处理的几种方法 2,1 数据的零点中心化 数据的零点中心化的目的就是为了把数据的整体分布拉回到原点附近,也就是让数据的整体均值变为0。 ​ 2,2 数据的标准化 数据…