I_O —基础概念(参照 Ubuntu 16.04 版本)

2023-05-16

一、文件的概念
  • 定义:
  1. 所谓文件是指一组相关数据的有序集合,这个数据集有一个名称,叫文件名。如源程序文件,目标文件,可执行文件,头文件等
  2. 文件通常是在驻留在外部介质上的,使用时才调入内存
  • 分类:
  1. 文件类型:
普通文件 -
指ASCII文本文件、二进制文件以及硬链接文件
目录文件 d
包含若干文件或子目录
符号链接
只保留所指向文件的地址而非文件本身
管道文件
用于进程间通信
字符设备文件
原始的I/O设备文件,每次操作仅操作1个字符(例如键盘)
块设备
按块 I/O 设备文件(例如硬盘)
套接字
进程间通信的特殊文件,与管道不同的是套接字能通过网络连接使不同的计算机的进程进行通信
  1. 从文件的编码方式划分:
文本文件(普通文件)
以ACSII 码格式存放,一个字节存放一个字符。文本文件的每一个字节存放一个ASCII码,代表一个字符。
特点:
便于对字符的逐个处理
占用存储空间较多
转换为二进制速度慢
直观易记。
实例:整数 10000 0011000100110000001100000011000000110000 A 65 a 97
二进制文件
把数据以二进制数的格式存放在文件中
特点:
占用存储空间较少
无需数据转换
按其内存中的存储形式原样存放,字节不对应字符。
不能直接输出字符形式。
实例:整数10000 0010011100010000
  • Linux 系统的文件目录结构
  1. 树形结构
  2. 目录分类
/etc 存放系统配置文件
/bin 存放常用指令
/sbin (root用户的)存放指令目录
/home 用户主目录,所有用户文件默认建立在此目录下
/boot 包含内核启动文件
/dev 存放设备文件(与底层驱动交互)
/usr 存放应用程序
/mnt 挂载目录
/root root用户主目录
/proc process的所写,存放描述系统进程的详细信息
/lib 存放常见库文件
/lost+found 可以找到一些误删除或丢失的文件并恢复它们

二、系统调用与用户编程接口(API)
  • 系统调用(System Call)
  1. 由操作系统实现提供的所有系统调用所构成的程序接口的集合
  2. 是应用程序与操作系统间的接口与纽带
  3. 主要功能:
为管理硬件资源和应用程序开发人员提供良好的环境
使应用程序具有良好的兼容性
内核提供一系列具备预定功能的函数,通过系统调用的接口呈现给用户
当用户访问系统调用,系统调用把应用程序的请求传递给内核,调用相应的内核函数完成所需处理,将处理结果返回给应用程序。
  • 应用程序编程接口(API,Application Programming Interface)
    1. 预定义的函数
    2. 提供基于软件/硬件的应用程序使开发人员具有访问一组例程的能力,同时开发人员又无需访问源码或理解内部工作原理机制
  • 系统调用与 API 比较
系统调用功能非常简单,有时无法满足程序的需求
不同操作系统的系统调用接口不兼容,若使用系统调用接口则程序移植工作量非常大
API 使用各种库中的函数
使用 API 程序开发者无需自己编写这些代码,直接可以调用函数就能实现功能,提高了编码效率和代码复用率
使用 API 一定程度上解决了程序的可移植性
通常情况下,API 在实现时需要依赖系统调用接口

三、POSIX 简介
  1. POSIX(Portable Operating System Interface):可移植操作系统接口
  2. POSIX 标准定义了操作系统应该为应用程序提供的接口标准,
  3. POSIX 标准是 IEEE 为要在各种 UNIX 操作系统上运行的软件而定义的一系列 API 标准的总称
  4. POSIX 标准正式称呼为IEEE 1003,而国际标准名称为 ISO/IEC 9945
  5. POSIX 标准意在期望获得源代码级别的软件可移植性
  6. 任何 POSIX 兼容的操作系统编写的程序,应该可以在任何其它的 POSIX 操作系统(即使是来自另一个厂商)上编译执行。

四、文件系统和 IO
  • 分类:
  1. 缓冲文件系统
  2. 非缓冲文件系统
  • 缓冲文件系统:
  1. 系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。从磁盘向内存读入数据时,则一次从磁盘文件将一些数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送给接收变量。向磁盘文件输出数据时,先将数据送到内存中的缓冲区,装满缓冲区后才一起送到磁盘区
  2. 用缓冲区可以一次读入一批数据,或输出一批数据,而不是执行一次输入或输出函数就去访问一次磁盘,这样做的目的是减少对磁盘的实际读写次数,提高读写效率
  • 非缓冲文件系统:
  1. 用户根据需要设置的,非系统自动设置的缓冲区
  2. 在传统的UNIX系统下,用缓冲文件系统处理文本文件,用非缓冲文件系统处理二进制文件
  3. 1983年ANSI C 标准决定不采用非缓冲文件系统,而只采用缓冲文件系统。即用缓冲文件系统处理文本文件,也用它来处理二进制文件。也就是将缓冲文件系统扩充为可以处理二进制文件
  • 输入输出分类:
标准输入输出(标准 I/O):缓冲文件系统的输入输出
文件输入输出(文件 I/O):非缓冲文件系统的输入输出
  • 标准 I/O 特点:
标准 I/O 是 ANSI C 中定义的用于 I/O 操作的一系列函数
标准 I/O 称为高级磁盘 I/O,遵循 ANSI C 相关标准
只要开发环境有标准 C 库,标准 I/O 就可以使用
标准 I/O 在文件 I/O 的基础上封装了缓冲机制,每次先操作缓冲区,必要时再访问文件,从而减少了系统调用的次数
标准 I/O 使用 FILE 指针来表示一个打开的文件,通常只能访问普通文件
  • 文件 I/O 特点:
文件I/O 是基于文件描述符的 I/O 操作
文件 I/O 称为低级磁盘 I/O,遵循 POSIX 标准
任何兼容 POSIX 标准的操作系统都支持文件 I/O
文件 I/O 读写文件时,每次都会执行相关系统调用(执行系统调用时,Linux 系统必须从用户态切换到内核态处理相应的请求,然后再返回用户态),因此会增加系统的开销
文件I/O使用文件描述符打开操作一个文件,可以访问不同类型的文件
  • Linux 系统下的 I/O:
在Linux系统中使用 GLIBC 标准,它是标准C库的超集
GLIBC 标准既支持 ANSI C 中定义的函数又支持 POSIX 中定义的函数
Linux 下既可以使用标准 I/O,也可以使用文件 I/O。

五、Linux标准 I/O
  • 文件流
  1. 含义:
标准I/O的核心对象是流
用标准 I/O 打开一个文件时,就会创建一个 FILE 结构体描述该文件
这个FILE结构体称为“流”
标准 I/O 函数都是基于流进行各种操作的
  1. 分类
文本流
二进制流
在 Linux/Unix 系统中,文本流与二进制流没有差异,但是在 Windows 中稍有差异,所以标准 C 库定义了两种流
  1. 文本流
由字符文件组成的序列
每一行包含 0 个或多个字符并以 \n 结尾
在流处理过程中所有数据以字符形式出现,\n 被当做回车符 CR 和换行符 LF 两个字符处理,即 \n 在 ASCII 码存储形式是 0x0D 和 0x0A,当输出时,0x0D 和0x0A 转换成 \n
  1. 二进制流
未经处理的字节组成的序列
在流处理过程中把数据当做二进制序列,若流中有字符则把字符当做ASCII 码的二进制数表示。\n 不进行变换。
  1. 实例比较文本流和二进制流
文本流:201---->'2''0''1''6'---->00110010 00110000 00110001 00110110
二进制流:2016---->数字2016---->0000 0111 1110 0000
  1. 三个标准流(FILE*类型指针)
标准输入流(stdin):针对标准输入键盘 scanf
标准输出流(stdout):针对标准输出屏幕 printf
标准错误流(stderr):针对标准输出屏幕
  1. 流的缓冲类型
全缓冲:当缓冲区被填满后才进行实际的 I/O 操作
对于存放在磁盘上的普通文件用标准 I/O 打开时默认是全缓冲的。当缓冲区满或者执行刷新缓冲区(fflush)操作才会进行磁盘操作
行缓冲:当在输入/输出中遇到换行符时执行I/O操作
标准输入/输出流(stdin/stdout)就是使用行缓冲。
无缓冲:不使用缓冲区进行 I/O 操作,即对流的读写操作会立即操作实际文件
标准错误流(stderr)是不带缓冲的,这就使得当发生错误时,错误信息能第一时间显示在终端上,而不管错误信息是否包含换行符。

六、文件操作
  • 文件操作流程:
  1. 标准 I/O 调用流程:
FILE * spIn;
size_t num;
int ret;
spIn = fopen(const char *filename, const char *mode);
#if 1 //以下内容是根据需要进行的相关的操作
num = fread(void *ptr, size_t size, size_t nmemb, spIn);
num = fwrite(const void *ptr, size_t size,size_t nmemb, spIn);
ret = fseek(spIn, long offset, int whence);
ret = ftell(spIn);
rewind(spIn);
……
#endif
fclose(spIn);
  1. 文件 I/O 调用流程:
int fd;
ssize_t size;
fd = open(const char *filename, int flags, mode_t mode);
#if 1//以下内容是根据需要进行的相关的操作
size = read(fd, void *buf, size_t count);
size = write(fd, const void *buf, size_t count);
int creat(const char *filename, mode_t mode);
off_t lseek(fd, off_t offset, int whence);
……
#endif
close(fd);
  • 文件操作相关说明:
  1. 文件类型结构体 FILE 和文件指针
VS2010 里 FILE 结构体:
typedef struct
{
short level;//缓冲区满/空的状态
unsigned flags;//文件状态标志
char fd;//文件描述符
unsigned char hold;//如缓冲区无内容则不读取字符
short bsize;//缓冲区的大小
unsigned char *buffer;//数据缓冲区的位置
unsigned char *curp;//指针当前的指向
unsigned istemp;//临时文件指示器
short token;//用于有效性检查
}FILE;
Linux 里 FILE 结构体:
struct _IO_FILE
{
int _flags; //High-order word is _IO_MAGIC; rest is flags
char* _IO_read_ptr; //Current read pointer
char* _IO_read_end; //End of get area
char* _IO_read_base; //Start of putback+get area
char* _IO_write_base; //Start of put area
char* _IO_write_ptr; //Current put pointer
char* _IO_write_end; // End of put area
char* _IO_buf_base; // Start of reserve area
char* _IO_buf_end; // End of reserve area
char *_IO_save_base; // Pointer to start of non-current get area
char *_IO_backup_base; //Pointer to first valid character of backup area
char *_IO_save_end; //Pointer to end of non-current get area
struct _IO_marker *_markers;
struct _IO_FILE *_chain;
int _fileno;
int _flags2;
_IO_off_t _old_offset;` //This used to be _offset but it's too small. _IO_off_t is unsigned long int
unsigned short _cur_column;
signed char _vtable_offset;
char _shortbuf[1];
_IO_lock_t *_lock;
}; //摘自 <libio.h>
typedef struct _IO_FILE FILE; //摘自 <stdio.h>
FILE 的作用:
缓冲文件系统为每个正使用的文件在内存开辟文件信息区
文件信息用系统定义的名为FILE的结构体描述
文件指针 FILE * 的定义:
文件指针实际上是一个文件类型的结构体指针
通过文件指针即可找到存放某个文件信息的文件类型结构体变量,然后按结构体变量提供的信息找到该文件,实施对文件的操作
文件打开时,系统自动创建文件类型结构体变量,并把指向它的指针返回来,程序通过这个指针获得文件信息并访问文件
文件关闭后,文件指针指向的结构体变量会被释放
  • 文件在内核中数据结构表示
  1. 文件描述符(file descriptor)
对于内核而言,所有打开的文件都有文件描述符应用。文件描述符是一个非负整数。当打开一个现存文件或创建一个新文件时,内核向进程返回一个文件描述符。当读写一个文件时,用 open 或 create 返回的文件描述符标识该文件,将其作为参数传送给 read 或 write
在 POSIX 应用程序中,整数 0,1,2 被替换成符号常数STDIN_FILENO, STDOUT_FILENO 和 STDERR_FILENO,这些常数都定义在头文件<unistd.h>中,见下图
文件描述符的范围是 0-OPEN_MAX。早期的 UNIX 版本采用的上限是 19,允许每个进程打开 20 个文件。现在很多系统将其增加到 1024,查看方法 ulimit -a ,值可修改,但只能对当前进程和子进程有效
文件表项指针
  1. 文件表项
文件状态标志
读写追加,同步和非阻塞等状态标志
当前文件偏移量。
i 节点表项指针
引用计数器
  1. i 节点
文件类型和该文件的操作函数指针
当前文件长度
文件所以者
文件所在设备,文件访问权限
指向文件数据在磁盘块上所在位置的指针等


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

I_O —基础概念(参照 Ubuntu 16.04 版本) 的相关文章

  • Nodejs快速搭建简单的HTTP服务器,并发布公网远程访问

    文章目录 前言1 安装Node js环境2 创建node js服务3 访问node js 服务4 内网穿透4 1 安装配置cpolar内网穿透4 2 创建隧道映射本地端口 5 固定公网地址 转载自内网穿透工具的文章 xff1a 使用Node
  • Leetcode每日一题——“合并两个有序数组”

    各位CSDN的uu们你们好呀 xff0c 又到小雅兰的愉快题解时候啦 xff0c 今天 xff0c 我们的题目内容是合并两个有序数组 xff0c 下面 xff0c 让我们进入合并两个有序数组的世界吧 示例 1 xff1a 输入 xff1a
  • Leetcode每日一题——“链表的中间结点”

    各位CSDN的uu们你们好呀 xff0c 今天 xff0c 小雅兰愉快的刷题内容是链表的中间结点 嘿嘿 xff0c 小雅兰的单链表还在偷懒ing xff0c 一直没有更新 xff0c 最近应该会更新出来 下面 xff0c 就让我们进入链表的
  • VRPN-体验

    VRPN简介 VRPN提供封装在库里的一套类 xff0c 在VR系统中 xff0c 用来为应用程序和物理外设提供网络传输接口 详细点击这里 VRPN源码获取 git clone https github com vrpn vrpn git
  • 单链表——“数据结构与算法”

    各位CSDN的uu们你们好呀 xff0c 今天 xff0c 小雅兰的内容终于是我们心心念念的单链表啦 xff0c 这一块呢 xff0c 是一个很重要的部分 xff0c 也是一个对目前的我来说 xff0c 比较困难的部分 xff0c 下面 x
  • springboot服务端接口外网远程调试,并实现HTTP服务监听【内网穿透】

    文章目录 前言1 本地环境搭建1 1 环境参数1 2 搭建springboot服务项目 2 内网穿透2 1 安装配置cpolar内网穿透2 1 1 windows系统2 1 2 linux系统 2 2 创建隧道映射本地端口2 3 测试公网地
  • MCSM面板一键搭建我的世界服务器-外网远程联机【内网穿透】

    文章目录 前言1 Mcsmanager安装2 创建Minecraft服务器3 本地测试联机4 内网穿透4 1 安装cpolar内网穿透4 2 创建隧道映射内网端口 5 远程联机测试6 配置固定远程联机端口地址6 1 保留一个固定TCP地址6
  • 初识MySQL数据库——“MySQL数据库”

    各位CSDN的uu们你们好呀 xff0c 小雅兰好久没有更文啦 xff0c 确实是心有余而力不足 xff0c 最近学习的内容太难了 xff0c 这篇博客又是小雅兰的新专栏啦 xff0c 主要介绍的是一些MySQL数据库的知识点 xff0c
  • Windows10本地搭建网站教程【内网穿透】

    文章目录 概述1 搭建一个静态Web站点2 本地浏览测试站点是否正常3 本地站点发布公网可访问3 1 安装cpolar内网穿透3 2 创建隧道映射公网地址3 3 获取公网URL地址 4 公网远程访问内网web站点5 配置固定二级子域名5 1
  • MySQL环境搭建——“MySQL数据库”

    各位CSDN的uu们你们好呀 xff0c 小雅兰又来啦 xff0c 好久没有更文啦 xff0c 今天继续 xff01 xff01 xff01 今天小雅兰的内容是MySQL环境搭建 xff0c 下面 xff0c 让我们进入MySQL数据库的世
  • 在树莓派上搭建WordPress博客网站【内网穿透】

    文章目录 概述安装 PHP安装MySQL数据库安装 Wordpress设置您的 WordPress 数据库设置 MySQL MariaDB创建 WordPress 数据库 WordPress configuration将WordPress站
  • 双链表——“数据结构与算法”

    各位CSDN的uu们你们好呀 xff0c 今天 xff0c 小雅兰又回来了 xff0c 到了好久没有更新的数据结构与算法专栏 xff0c 最近确实发现自己有很多不足 xff0c 需要学习的内容也有很多 xff0c 所以之后更新文章可能不会像
  • Windows在外远程桌面控制macOS【macOS自带VNC远程】

    文章目录 前言1 测试局域网内远程控制1 1 macOS打开屏幕共享1 2 测试局域网内VNC远程控制 2 测试公网远程控制2 1 macOS安装配置cpolar内网穿透2 2 创建tcp隧道 xff0c 指向5900端口 3 测试公网远程
  • 初学正点原子Ministm32板串口实验

    本章将实现如下功能 xff1a STM32 通过串口和上位机的对话 xff0c STM32 在收到上位机发过来的字符串后 xff0c 原原本本的返回给上位机 本章分为如下几个小节 xff1a 1 STM32串口简介 2 硬件设计 3 软件设
  • Qt网络通信实战(聊天室小项目TCP实现)

    一 UDP与TCP的区别 用一个表格来显示这两者的区别 比较项TCPUDP是否连接面向连接无连接传输是否可靠可靠不可靠流量控制提供不提供工作方式全双工可以是全双工应用场合大量数据少量数据速度慢 快 我们这里采用TCP 当有新的连接出现时就会
  • 常用坐标系及坐标系之间的变换

    坐标系统 xff1a 有哪些坐标系 xff0c 他们之间的变换矩阵是怎样的 xff1f xff08 主要是3个坐标系 3 个角 xff09 地理坐标系 xff08 n系 xff09 坐标系原点On取为飞行器质心 Xn轴向指向北 xff0c
  • ulimit命令用法详解

    ulimit用来限制每个用户可使用的资源 xff0c 如CPU 内存 句柄等 一 用法 ulimit SHacdefilmnpqrstuvx 限制 参数详解 S xff1a 表示软限制 超出设定的值会告警 H xff1a 表示硬限制 xff
  • java的数组反转

    Java中数组反转一般有两个思路 xff0c 第一个是新建一个临时数组 xff0c 把原来的数组内各值倒着给放进去 public class ArrayReverse public static void main String args
  • Ardupilot移植经验分享(1)

    目录 前言背景为什么写这篇文章移植Ardupilot的方法有两种底层适配提取应用层代码两种方法对比 准备阅读源码阅读官方开发者wiki选择编译平台下载编译源代码切换版本的正确方式编译老版本手动下载编译器修改PATH配置配置ubuntu以支持
  • 国产UOS系统之——安装wxPython

    安装依赖库 xff1a sudo apt get install libgtk 3 dev sudo apt get install libcanberra gtk module sudo apt get install pkg confi

随机推荐

  • OpenHarmonyllvm交叉编译工具链编译介绍

    一 工具链基础介绍 1 1 工具链下载 repo init u https gitee com OpenHarmony manifest git b master m llvm toolchain xml repo sync c repo
  • 一键配置Ubuntu的OpenHarmony基础编译环境

    一键配置Ubuntu的OpenHarmony基础编译环境 一 配置前说明 该更新源仅适用于Ubuntu以下系列 Ubuntu18 04 Ubuntu20 04 Ubuntu22 04 强烈推荐Ubuntu20 04 xff0c 本人使用的一
  • 卸载Proteus后再次安装出错解决办法

    相信有人和我一样 xff0c 在卸载Proteus后再次安装时会跳过下图这一步 然后安装完了注册时会弹出修改注册 LICENCE失败 xff0c 从而导致破解不成功 xff0c 怎么办呢 xff1f 本人解决方法 xff1a 1 首先正常安
  • STM32cubeMx来对单片机串口1进行初始化

    步骤如下 xff1a 打开STM32CubeMX软件并新建一个工程在Pinout amp Configuration选项卡中选择正确的芯片型号 xff0c 然后在Pinout视图中找到串口1相关的引脚 默认情况下 xff0c 串口1使用PA
  • Keil 头文件源程序代码——Math.h

    MATH H Prototypes for mathematic functions Copyright c 1988 2002 Keil Elektronik GmbH and Keil Software Inc All rights r
  • Keil头文件代码—Absacc

    ABSACC H Direct access to 8051 extended 8051 and NXP 8051MX memory areas Copyright c 1988 2010 Keil Elektronik GmbH and
  • reg52.h中直接定义了P3^4等引脚,但是P1^5引脚没有明确表示出来?

    实际上reg52 h中已经定义了 34 sfr P0 61 0x80 sfr P1 61 0x90 sfr P2 61 0xA0 sfr P3 61 0xB0 34 等引脚的地址 xff0c 如果取P1 5的引脚 xff0c 只需要表示成
  • 关于scanf很多人不知道的小秘密

    今天忽然想到一个问题 xff0c 假如我利用scanf想给变量a输入一个 d的整数 xff0c 结果不小心输入了一个字符串yf或者是123ff后会怎么样呢 xff1f 哈哈 xff0c 自己测试了一下 xff0c 结果发现 xff0c 当你
  • 关于sizeof(*p+1)的那些事

    今天老铁在写程序时发现一个意外 xff0c 在char a 61 1 3 5 7 9 p 61 a 程序求sizeof p 43 1 时遇到一些意外 xff0c 本来以为会是1 xff0c 结果却出意料的是4 xff0c 这就有些尴尬了 x
  • 求解完数

    完数的定义 xff1a 一个数如果恰好等于它的因子之和 xff0c 这个数就称为 完数 例如 xff1a 6 61 1 xff0b 2 xff0b 3 如果需要求解1000或者10000以内的所有完数 xff0c 怎么做呢 xff1f 分析
  • 查找100-200以内素数

    只能被1和其本身整除的数称为素数 xff0c 1不是素数 xff0c 因为简单 xff0c 所以不做解释 xff0c 直接上程序 源代码如下 xff1a Search all prime numbers from 101 to 200 in
  • 实现4个按键控制8个LED灯1个数码管程序

    按要求C语言编程 xff0c 实现4个按键控制8个LED灯1个数码管程序 具体要求如下 xff1a 1 按键一 xff0c 清零作用 无论数码管以前显示何内容 xff0c 都归零 xff0c 显示0 xff1b 2 按键二 xff0c 加一
  • Linux 关机/重启指令

    Linux系统下关机指令只有root用户终端才能下达 xff08 Linux里切换用户可以用 su root 输入密码便进入 root 用户 xff09 xff0c 同时其他终端也会接收到 如root用户发出关机指令 其他终端也会收到相应的
  • C 语言中的goto、 break 和 continue 语句使用

    一 goto 语句 goto 语句为无条件跳转 xff0c goto 语句后面带一个标识符 xff0c 该标识符是同一个函数 内某条语句的标号 标号可以出现在任何可执行语句的前面 xff0c 并且以一个冒号 xff1a 作为后缀 gt Fi
  • 云台控制协议VISCA、PELCO-D、PELCO-P

    原 云台控制协议VISCA PELCO D PELCO P 2013年12月02日 18 42 21 autowanglei 阅读数 xff1a 10146 更多 lt div class 61 34 tags box space 34 g
  • 目录和文件权限与 umask 关系

    一 权限 文件权限 xff1a r xff1a 读取文件内容的权限 w xff1a 新增 修改和删除文件内容的权限 x xff1a 执行文件的权限 例如 xff1a 一个文件a sh xff0c 它的权限是rw xff0c 使用 a sh
  • open 函数的 flag 参数和错误代码

    一 flag 参数 定义头文件 xff1a lt bits fcntl linux h gt 必选参数说明 xff1a define O ACCMODE 0003 xff1a 读写文件操作时取出 flag 的低两位 define O RDO
  • 系统全局变量 errno 是如何获得 errno.h 中的值的呢?

    很多时候我们在使用 errno 的时候都知道它代表的是 errno h 中的错误值 xff0c 可是为什么它就是代表那些值的呢 xff1f 系统在哪里给它赋值了呢 xff1f 故事就要从源头开始 1 errno 全局变量是在哪里定义的 xf
  • const pointer

    int a b const int p 61 a 与int const p 61 a 是一样的 表示p可以指向a xff0c 也可以改变指向b xff0c 但是不能通过指针p来修改a的值 p 61 b p 61 4 int const q
  • I_O —基础概念(参照 Ubuntu 16.04 版本)

    一 文件的概念 定义 xff1a 所谓文件是指一组相关数据的有序集合 xff0c 这个数据集有一个名称 xff0c 叫文件名 如源程序文件 xff0c 目标文件 xff0c 可执行文件 xff0c 头文件等文件通常是在驻留在外部介质上的 x