linux高级编程(1)

news2025/1/14 1:09:20

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.coloradmin.cn/o/1853973.html

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

相关文章

【jenkins1】gitlab与jenkins集成

文章目录 1.Jenkins-docker配置:运行在8080端口上,机器只要安装docker就能装载image并运行容器2.Jenkins与GitLab配置:docker ps查看正在运行,浏览器访问http://10....:8080/2.1 GitLab与Jenkins的Access Token配置:不…

20-OWASP top10--XXS跨站脚本攻击

目录 什么是xxs? XSS漏洞出现的原因 XSS分类 反射型XSS 储存型XSS DOM型 XSS XSS漏洞复现 XSS的危害或能做什么? 劫持用户cookie 钓鱼登录 XSS获取键盘记录 同源策略 (1)什么是跨域 (2)同源策略…

PD虚拟机和VMware有什么区别?PD虚拟机和VMware谁更好用?

随着电脑硬件设备的飞快发展,一些高端的技术已经不再遥不可及,比如虚拟化,虚拟机技术已经成为IT领域和个人用户不可或缺的工具。特别是PD虚拟机(Parallels Desktop)和VMware,作为市场上两个主流的虚拟机软件…

【Web APIs】DOM 文档对象模型 ⑤ ( 获取特殊元素 | 获取 html 元素 | 获取 body 元素 )

文章目录 一、获取特殊元素1、获取 html 元素2、获取 body 元素3、完整代码示例 本博客相关参考文档 : WebAPIs 参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/APIgetElementById 函数参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/API/Document/getE…

4、SpringMVC 实战小项目【加法计算器、用户登录、留言板、图书管理系统】

SpringMVC 实战小项目 3.1 加法计算器3.1.1 准备⼯作前端 3.1.2 约定前后端交互接⼝需求分析接⼝定义请求参数:响应数据: 3.1.3 服务器代码 3.2 ⽤⼾登录3.2.1 准备⼯作3.2.2 约定前后端交互接⼝3.2.3 实现服务器端代码 3.3 留⾔板实现服务器端代码 3.4 图书管理系统准备后端 3…

【STM32c8t6】AHT20温湿度采集

【STM32c8t6】AHT20温湿度采集 一、探究目的二、探究原理2.1 I2C2.1. 硬件I2C2.1. 软件I2C 2.2 AHT20数据手册 三、实验过程3.1 CubeMX配置3.2 实物接线图3.3 完整代码3.4 效果展示 四、探究总结 一、探究目的 学习I2C总线通信协议,使用STM32F103完成基于I2C协议的A…

打印机状态显示错误是什么原因?这5个有效方法要记好!

打印机是现代办公中不可或缺的设备之一,但在使用过程中,打印机状态显示错误是一个常见的问题。本文将详细探讨打印机状态显示错误的原因及其解决方法。 摘要 打印机状态显示错误的原因及解决方法如下: 1、网络连接问题:原因&…

【docker1】指令,docker-compose,Dockerfile

文章目录 1.pull/image,run/ps(进程),exec/commit2.save/load:docker save 镜像id,不是容器id3.docker-compose:多容器:宿主机(eth0网卡)安装docker会生成一…

Linux简单使用——配置仓库

虚拟机和Xshell连接 在虚拟机上打开终端查看IP 在Xshell上建立会话 输入ssh root192.168.231.123 防火墙关闭 、 重启计算机命令 删除文件 然后ls查看 清除之前的垃圾 最后做一下命令缓存

C语言 | Leetcode C语言题解之第174题地下城游戏

题目: 题解: int calculateMinimumHP(int** dungeon, int dungeonSize, int* dungeonColSize) {int n dungeonSize, m dungeonColSize[0];int dp[n 1][m 1];memset(dp, 0x3f, sizeof(dp));dp[n][m - 1] dp[n - 1][m] 1;for (int i n - 1; i >…

DataStructure.时间和空间复杂度

时间和空间复杂度 【本节目标】1. 如何衡量一个算法的好坏2. 算法效率3. 时间复杂度3.1 时间复杂度的概念3.2 大O的渐进表示法3.3 推导大O阶方法3.4 常见时间复杂度计算举例3.4.1 示例13.4.2 示例23.4.3 示例33.4.4 示例43.4.5 示例53.4.6 示例63.4.7 示例7 4.空间复杂度4.1 示…

车载测试系列:CAN协议之远程帧

远程帧(也叫遥控帧):是接收单元向发送单元请求发送具有标识符的数据所用的帧,由 6 个段组成,没有数据段。 当某个节点需要数据时,可以发送远程帧请求另一节点发送相应数据帧。 简单的说:发起方…

首次使用回声状态网络 (ESN) 和语音特征进行帕金森病 (PD) 预测

帕金森病(Parkinsons disease, PD)是一种使人衰弱的神经退行性疾病,它需要进行精确和早期的诊断,以便为患者提供有效的治疗和护理。这种疾病是由James Parkinson在1817年首次确定的,其特征是多巴胺生成神经元的退化。多…

每日一题——Python代码实现力扣1. 两数之和(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 菜鸡写法 代码分析 时间复杂度分析 空间复杂度分析 改进建议 我要更强 方法1: 使…

项目训练营第四天

项目训练营第四天 前端部分修改 前端用的是WebStorm和Ant Design Pro框架 Ant Design Pro是比较流行的一个前端登陆、注册、管理框架,能帮我们快速实现前端界面的开发 效果大致如图 使用起来也极为方便,首先在WebStorm 控制台中输入如下命令 # 使用…

Linux的基本指令第二篇

1.cat - 查看文件 语法:cat [选项] [文件] 功能: 查看目标文件的内容 -b 对非空输出行编号 -n对输出的所有行编号 -s不输出多行空行 现有一个文件test.c cat -n test.c cat -b test.c cat -s test.c 创建一个新文件 加入源文件的内容 || …

力扣每日一题 6/23 字符串/模拟

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 520.检测大写字母【简单】 题目: 我们定义,在以下…

飞行堡垒系列_键盘灯开关

飞行堡垒系列键盘灯可以通过键盘上的"Fn 方向键"控制 演示机型品牌型号:飞行堡垒8 系统版本:Windows 11 飞行堡垒键盘灯可通过键盘上的"Fn方向键"控制。 " Fn 下方向键 "为减弱键盘灯光,多按几次键盘灯就可…

软考初级网络管理员__软件单选题

1.在Excel 中,设单元格F1的值为56.323,若在单元格F2中输入公式"TEXT(F1,"¥0.00”)”,则单元格F2的值为()。 ¥56 ¥56.323 ¥56.32 ¥56.00 2.要使Word 能自动提醒英文单…

web安全渗透测试十大常规项(一):web渗透测试之JAVA反序列化

渗透测试之PHP反序列化 1. Java反序列化1.1 Java安全-反序列化-原生序列化类函数1.1.1 原生序列化类函数:1.2 Java安全-SpringBoot框架-泄漏&CVE1. Java反序列化 1、序列化与反序列化 序列化:将内存中的对象压缩成字节流 反序列化:将字节流转化成内存中的对象2、为什么…