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

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 

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

相关文章:

  • 华为Atlas NPU ffmpeg 编译安装
  • cuda与cudnn下载(tensorflow-gpu)
  • 爬虫经典案例之爬取豆瓣电影Top250(方法一)
  • 学习前台开发主要掌握的技能
  • SpringCloud和K8s的区别
  • python从入门到精通4:变量赋值
  • Linux开发讲课7---Linux sysfs文件系统
  • 【设计模式之迭代器模式 -- C++】
  • web安全渗透测试十大常规项(一):web渗透测试之PHP反序列化
  • CentOS 7 内核 3.10 升级 6.5.2 (RPM 直装 + 源码编译)
  • 新建一个 React TypeScript 项目,并使用 Webpack 进行构建和打包
  • Java程序之让气球上升
  • 介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用
  • git配置ssh key
  • tensorRT C++使用pt转engine模型进行推理
  • [译]如何构建服务器端web组件,为何要构建?
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • cookie和session
  • es6--symbol
  • IDEA常用插件整理
  • java中具有继承关系的类及其对象初始化顺序
  • pdf文件如何在线转换为jpg图片
  • vue-cli在webpack的配置文件探究
  • 分类模型——Logistics Regression
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何优雅地使用 Sublime Text
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 整理一些计算机基础知识!
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #数据结构 笔记一
  • #微信小程序:微信小程序常见的配置传旨
  • (4)Elastix图像配准:3D图像
  • (6)添加vue-cookie
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Note)C++中的继承方式
  • (NSDate) 时间 (time )比较
  • (Python第六天)文件处理
  • (windows2012共享文件夹和防火墙设置
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (规划)24届春招和25届暑假实习路线准备规划
  • (含笔试题)深度解析数据在内存中的存储
  • (回溯) LeetCode 78. 子集
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转) Face-Resources
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net SqlSugarHelper
  • .Net 知识杂记
  • .Net 执行Linux下多行shell命令方法
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET简谈设计模式之(单件模式)