自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

菜鸟的博客

记录与分享

  • 博客(172)
  • 问答 (1)
  • 收藏
  • 关注

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.6 点对点协议(Point-to-Point Protocol (PPP)) / 3.6.1 链路控制协议(LCP)

(Time-Remaining)消息用于管理目的:了解对方系统的类型,并指示允许链路保持建立状态的时间(例如,出于管理或安全的原因)如果链路需要认证,如向 ISP 拨号时,可能需要进行一些额外的交换来确定连接到链路的一方或双方的真实性。包括以下信息:幻数、发送和接收的数据包与字节的数量、传入的错误数据包数量、丢弃的数据包数量、交换的。点对点不需要地址信息,但点对点帧的有效载荷中可以携带高层协议的地址,如 IP 地址,但不是自己用的。

2023-02-12 16:16:58 979 1

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.5 无线局域网 - IEEE 802.11 (Wi-Fi) / 3.5.6 Wi-Fi 网格(Mesh)(802.11s)

(Optimized Link State Routing (OLSR))协议 [ RFC3626] 制定的 IETF 标准。相反,所有站点被平等对待,任何先识别出另一个站点的站点都可以发起安全交换(或者,两个站点同时发起交换)SAE 与其它安全协议略有不同,它不需要在一个特别指定的发起者与响应者之间进行同步操作。)操作,无线站点可以作为数据转发代理(像 AP 一样)但符合标准的节点必须包括 HWRP 的实现和相关的。(MPs))是那些与相邻节点形成网格链路的节点。)功能的网格点被称为。

2023-01-26 15:33:13 259

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.5 无线局域网 - IEEE 802.11 (Wi-Fi) / 3.5.5 Wi-Fi 安全

因此,WPA 和更高版本的标准开始支持一个被称为 802.1X [802.1X-2010] 的基于端口的网络访问控制标准。而 IEEE 802.11i 标准组制定了一个更强大的标准,最终被纳入了 [802.11-2007] 的条款 8。反过来,EAP 可以用来携带许多其它标准的和非标准的鉴权协议,还可以用来建立密钥,包括 WEP 密钥。作为 WPA2 的一部分,一种被称为 CCMP 的新算法扩展了 WPA 中的 RC4/TKIP 组合。像 WEP 这样的较早的方法,被称为 pre-RSNA 方法。

2022-09-10 16:55:10 640

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.5 无线局域网 - IEEE 802.11 (Wi-Fi) / 3.5.4 物理层细节:速率,信道,频率

802.11n 的 MCS 值,包括以下这些组合:对称与非对称调制、不同的 FEC 编码率、使用 20MHz 或 40MHz 宽的信道的最多 4 个空间流以及 800ns 或 400ns 的 GI。802.11n 信道可能有 40MHz 宽(使用两个相邻的 20MHz 信道),是 802.11a/b/g/y 中常规信道宽度的两倍。图 3-21 中信道以 5MHz 为增量编号,但也有不同的信道宽度:5MHz、10MHz、20MHz、40MHz。

2022-09-07 23:04:37 1119

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.5 无线局域网 - IEEE 802.11 (Wi-Fi) / 3.5.3 802.11 介质访问控制

优先级 1 和 2 用于后台 AC,0 和 3 用于 best-effort AC,4 和 5 用于视频 AC,6 和 7 用于语音 AC。HCF 存在于相对较新的支持 QoS 的 Wi-Fi 设备中,如 802.11n AP 和支持 802.11e 的早期 AP。802.11 中的频道仲裁是基于增强版 CSMA/CA 的,增强部分提供了对某些站点或帧类型的优先访问。在利用率和拥塞很高,或需要支持 VoIP 之类的需要低抖动传递能力的服务时,可能需要 QoS 支持。

2022-08-31 23:11:01 1029

原创 Kubernetes 笔记 / 入门 / 生产环境 / 用部署工具安装 Kubernetes / 用 kubeadm 启动集群 / 用 kubeadm 创建高可用 etcd 集群

虽然本文中使用kubeadm作为外部 etcd 节点的管理工具但kubeadm不能支持此类节点的证书轮换或升级长期的计划应该是授权工具来管理证书本文介绍了创建高可用外部 etcd 集群的过程该集群由 3 个成员组成,kubeadm在创建集群期间可以使用它们。

2022-08-21 10:25:56 478

原创 Kubernetes 笔记 / kubeadm / 高可用注意事项

如果没有,则可以使用用户管理的负载平衡,在这种情况下,启动集群之前需要做一些准备。在某些环境中,如在具有专用负载均衡器组件(如某些云供应商提供的)的数据中心中。以便始终使用当前持有 vIP 的主机上的负载均衡器,而其它主机处于待机状态。为此,设置了管理虚拟 IP 的主机集群,每个主机运行一个负载均衡器的实例。下边的内容给出了一些有用的例子,当然还有许多其它配置负载均衡器的方法。负载均衡器自己也应该是高可用的,通常通过添加冗余的负载均衡器来实现。对于工作节点,假设有足够多的节点,这是集群功能的一部分。

2022-08-20 18:25:01 1329

原创 Kubernetes 笔记 / 入门 / 生产环境 / 用部署工具安装 Kubernetes / 用 kubeadm 启动集群 / 用 kubeadm 创建高可用集群

使用kubeadm本文的目的不是在云供应商上运行集群在云环境中,这里的方法不适用于类型为 LoadBalancer 的服务对象也不适用于具有动态 PersistentVolume 的对象。

2022-08-13 22:41:13 829

原创 Kubernetes 笔记 / 入门 / 生产环境 / 用部署工具安装 Kubernetes / 用 kubeadm 启动集群 / 两种高可用拓扑

本文将介绍用于配置高可用(highly available (HA))Kubernetes 集群拓扑的两个选项在配置高可用集群之前,应该仔细考虑每种拓扑的优缺点kubeadm会静态地启动 etcd 集群详见 etcd。

2022-08-10 22:00:09 317

原创 Kubernetes 笔记 / 入门 / 生产环境 / 用部署工具安装 Kubernetes / 用 kubeadm 启动集群 / 用 kubeadm 创建集群

使用kubeadm,可以创建一个符合最佳实践的最小可行的 Kubernetes 集群实际上,可以使用kubeadm设置一个能够通过的集群kubeadm还支持其他集群生命周期功能,例如和集群升级kubeadm可以在各种机器上安装kubeadm:笔记本电脑、云服务器、树莓派等等无论是部署到云端还是本地,都可以将kubeadm集成到配置系统中,如 Ansible 或 Terraform。......

2022-08-08 21:53:48 1104

原创 容器运行时 笔记 / CRI-O / CRI-O 安装说明

是一个基于(Open Container Initiative (OCI))的本文的环境为 Linux 操作系统。

2022-08-04 06:11:59 2195

原创 Kubernetes 笔记 / 入门 / 生产环境 / 容器运行时

自1.24版起,Kubernetes项目移除了Dockershim详见为了让Pod能够运行,需要在集群的每个节点上安装一个容器运行时Kubernetes1.24要求使用符合的运行时详见v1.24前的Kubernetes发行版包括一个与DockerEngine的直接集成使用一个名为dockershim的组件这种特殊的直接整合不再是Kubernetes的一部分(作为v1.20发行版的一部分,被)描述了该移除可能会如何影响你描述了如何从dockershim。............................

2022-07-31 20:27:15 666

原创 Kubernetes 笔记 / 任务 / 管理集群 / 用 kubeadm 管理集群 / 配置一个 cgroup 驱动

按这种方法,在加入新节点、确保工作负载可以安全迁移到新节点、删除旧节点一系列操作之前。在节点上依次执行上述步骤,确保工作负载有充足的时间被调度到其它节点。中还提供了如何配置不同的容器运行时,使其默认使用。一个最小化的示例,其中显式地配置了此字段。流程完成后,确认所有节点和工作负载均健康。在版本1.22中,如果用户没在。驱动,需要参考所选容器运行时的文档。对集群所有的节点使用相同的。的新节点替换掉集群中的老节点。驱动,使其与容器运行时的。中并把它传递给本地节点的。描述了显式设置该值的方法。......

2022-07-30 18:25:12 420

原创 Kubernetes 笔记 / 入门 / 生产环境 / 用部署工具安装 Kubernetes / 用 kubeadm 启动集群 / 安装 kubeadm

cri-dockerd 是一个基于遗留的支持内置 Docker 引擎的项目,它在 1.24 版本从 kubelet中。如果检测到多个容器运行时或没有检测到容器运行时,kubeadm 将抛出错误并要求指定容器运行时。建议预先添加 IP 路由规则,这样 Kubernetes 集群就可以通过对应的适配器完成连接。由于各个 Pod 网络插件的功能都有所不同,请参阅他们各自文档中对端口的要求。为了在 Pods 中运行容器,Kubernetes 会使用一个。,而这是容器运行时在 Kubernetes 中工作所必须的。

2022-07-30 10:23:49 572

原创 Kubernetes 笔记 / 生产环境

目录、参考文献生产质量的 Kubernetes 集群需要规划和准备如果你的 Kubernetes 集群是用来运行关键负载的,该集群必须被配置为弹性的(Resilient)本页面阐述了在安装生产就绪的集群或将现有集群升级为生产用途时可以遵循的步骤生产环境可能需要被很多用户安全地访问需要提供一致的可用性,以及能够与需求变化相适配的资源随着情况的不同,如 Kubernetes 生产环境将在何处(本地或云端)运行希望自己的或交给别人的管理工作量有多大应该考虑以下这些问题如何影响对 Kubernetes

2022-07-30 09:24:38 233

原创 Kubernetes 笔记 / 目录

参考文献:Kubernetes Documentation参考文献:Kubernetes Documentation

2022-07-30 09:21:36 289

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.5 无线局域网 - IEEE 802.11 (Wi-Fi) / 3.5.2 节能模式(PSM)与时间同步功能(TSF)

目录、参考文献802.11 规范为站点提供了一种进入受限电源状态的方法,称为节能模式(power save mode (PSM))节能模式(power save mode (PSM))允许站点的无线电接收电路在某些时候断电,从而起到节能的作用如果没有节能模式(power save mode (PSM)),接收器电路会一直运行消耗能量在节能模式(power save mode (PSM))中,站点的输出帧在帧控制字(Frame Control Word)中有一个比特位会被设置注意到该位被设置的协作 A

2022-07-10 21:14:05 1398

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.5 无线局域网 - IEEE 802.11 (Wi-Fi) / 3.5.1 802.11 帧

它还给出了过度重试的次数(即重传尝试的次数),这是一个粗略的链路可靠性指标,链路可靠性指标常被用于指导无线网络中的路由决策 [ETX]如果 2 个或 3 分片发送成功的情况发生,最多一个分片需要被重传,这会比未分片时重传原始的 1500 字节大小的帧花费少得多的时间。在有线以太网中,没有冲突表明帧被正确接收的概率很高,在无线网络中,无法正确传送帧的原因更多,如信号强度不够或受到干扰。通常,802.11 帧和链路层(LLC)的帧之间存在一对一的关系,链路层的帧可被用于更高层的协议,如 IP 协议。

2022-07-06 00:44:17 649

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.4 桥接器与交换机 / 3.4.2 多属性注册协议(Multiple Registration Protocol (MRP))

MMRP 是第 2 层协议,与第 3 层的 IGMP 和 MLD 协议以及许多交换机支持的 “ IGMP/MLD 侦听(snooping) ” 功能有相似之处。使用 MVRP,一旦终端站点被配置为 VLAN 成员,该信息就会被传送到其连接的交换机,然后将站点参与 VLAN 的消息传播到其它交换机。这允许交换机根据站点的虚拟局域网 ID 扩充其过滤表,并允许更改虚拟局域网拓扑,而无需通过 STP 触发对现有生成树的重新计算。如果没有这样的设施,交换机将不得不广播所有组播流量,这可能会导致不必要的开销。

2022-06-28 04:45:01 409

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.4 桥接器与交换机 / 3.4.1 生成树协议(Spanning Tree Protocol (STP))

在图 3-13 中,黑线代表网络中被 STP 选中的用于转发帧的链路,其它的链路不会被使用,端口 8、9、12、21、22 和 3 被。但如果它检测到了一个 ID 更小的网桥,则会停止发送自己的帧,然后把接收到的包含更小 ID 的帧作为之后发送的 BPDU 的基础。在一个根端口上,如果这个时间过期,并且没有收到其它的 BPDU,根网桥将被宣布 “ 死亡 ”,网桥会再次开始挑选新的根网桥。在典型的 15 秒转发延迟超时后,端口将进入学习(learning)状态,学习状态下可以执行除转发数据以外的所有操作。

2022-06-26 21:37:15 643

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.4 网桥与交换机

每当交换机(网桥)接收到一个发往除它自己以外的站点的帧时,它会为每个端口而不是帧到达的端口制作一份副本,并从每个端口发送一份该帧的副本。图 3-8 中的交换机 A 和 B 上的过滤数据库,是随着时间的推移,通过观察交换机端口上看到的帧上的源地址创建的(“ 学习的 ”)完成后,会出现一个新的图标,用来代表网桥本身,接口上的大多数普通网络属性都消失了,这些属性会出现在网桥设备上(见图 3-10)当一个交换机(网桥)第一次打开时,它的数据库是空的,所以它不知道除了它自己以外的任何站点的位置。

2022-06-19 11:30:24 487

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.3 全双工, 节能, 自动协商机制, 802.1X 流控制 / 3.3.3 链路层流量控制

但交换机内存的使用比例对于不同的发送主机可能是不均匀的,即便有些主机对通过交换机的大部分流量没有责任,却仍然可能会受到处罚(流量控制)当多个站点通过一个过载的交换机(见下一节)发送数据时,交换机会向所有主机发送 PAUSE 帧。如果前往一个站点的总流量速率超过该站点的链路速率,则帧会开始被存储到中间的交换机中。控制帧的帧格式使用的是图 3-3 中所示的常规封装方式,不过在。控制层(基本上只是 802.3x 流量控制)的实现是可选的。(NIC)之间发送特殊的信号帧来实现流量控制。PAUSE 帧始终发送到。

2022-06-18 18:20:03 452

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.3 全双工, 节能, 自动协商机制, 802.1X 流控制 / 3.3.2 网络唤醒, 节能, 幻数据包(Magic Packet)

图 3-7 所示的数据包大体上是一个常规的 UDP 数据包,尽管端口号(1126 和 40000)是任意的。在 Windows 中的 Wake-Up 功能和在 Linux 中的 Wake-On 选项。通常,此类帧以封装在广播以太网帧中的 UDP 数据包(见第 10 章)的形式发送。用于根据某些类型的数据包的到达,使网络接口和/或主机退出低功耗(睡眠)状态。在 Linux 和 Windows 的示例中,都能看到一些功耗管理的功能。数据包中最特别的部分是数据区域,包含一个初始的 6 字节,值为。

2022-06-17 23:06:16 822

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.3 全双工, 节能, 自动协商机制, 802.1X 流控制 / 3.3.1 双工不匹配(duplex mismatch)

因此,只有当半双工接口在发送数据的同时有足够的流量来接收数据时,才会出现性能下降的情况,轻负载下一般不会发生这种情况。),这是一种源自 802.3u 的机制,使接口能够交换一些信息,如速度信息、半双工或全双工操作这样的功能信息等等。随着交换式以太网的发展,网络不再是一根共享的电缆,而是多组链路,这样一来,多对站点可以同时交换数据。特别是当计算机与关联的交换机端口使用不同的双工配置时,或当链路的一端启用自动协商机制而另一端禁用时。自动协商信息是在物理层使用数据还未被发送或接收时发送的信号进行交换的。

2022-06-14 22:47:40 470

原创 TCP/IP 详解(第 2 版) 笔记 / 3 链路层 / 3.2 以太网与 IEEE 802 LAN/MAN 标准 / 3.2.4 802.1AX:链路聚合 (以前的 802.3ad)

第二种模式用于高可用系统,如果一个链路停止运行(可通过 MII 监控检测到,详细信息见 [BOND]),该系统可以故障转移到一个冗余的网络基础设施上。通常,一旦启用,LACP “ 参与者(actor)”(客户端)与 “ 合作伙伴(partner)”(服务器)就会每秒发送一次 LACPDU。通常,被聚合的端口必须属于同一种类型,并且以相同的模式(即:半双工或全双工)运行。如果可以聚合一个以上的端口来提供足够的带宽就不需要更高速度的端口了。以便通过冗余实现更高的可靠性(主备),或通过在多个接口之间拆分(

2022-06-13 20:38:40 575

原创 The C Programming Language(第 2 版) 笔记 / 8 UNIX 系统接口 / 8.7 实例(存储分配程序)

目录、参考文献我们在第 5 章给出了一个功能有限的面向栈的存储分配程序本节将要编写的版本没有限制,可以以任意次序调用 和 在必要时调用操作系统以获取更多的存储空间这些程序说明了通过一种与系统无关的方式编写与系统有关的代码时应考虑的问题,同时也展示了结构、联合和 的实际应用 并不是从一个在编译时就确定的固定大小的数组中分配存储空间,而是在需要时向操作系统申请空间因为程序中的某些地方可能不通过 调用申请空间(也就是说,通过其它方式申请空间),所以, 管理的空间不一定是连续的这样,空闲存储空间以

2022-06-12 14:48:06 130

原创 The C Programming Language(第 2 版) 笔记 / 8 UNIX 系统接口 / 8.6 实例(目录列表)

目录、参考文献我们常常还需要对文件系统执行另一种操作,以获得文件的有关信息,而不是读取文件的具体内容目录列表程序便是其中的一个例子,比如 UNIX 命令 ,它打印一个目录中的文件名以及其它一些可选信息,如文件长度、访问权限等等MS-DOS 操作系统中的 命令也有类似的功能由于 UNIX 中的目录就是一种文件,因此, 只需要读此文件就可获得所有的文件名但是,如果需要获取文件的其它信息,比如长度等,就需要使用系统调用在其它一些系统中,甚至获取文件名也需要使用系统调用,例如在 MS-DOS 系统中即如此

2022-06-12 14:45:35 207

原创 The C Programming Language(第 2 版) 笔记 / 8 UNIX 系统接口 / 8.5 实例(fopen 和 getc 函数的实现)

目录、参考文献下面以标准库函数 和 的一种实现方法为例来说明如何将这些系统调用结合起来使用标准库中的文件不是通过文件描述符描述的,而是使用文件指针描述的文件指针是一个指向包含文件各种信息的结构的指针,该结构包含下列内容:描述文件的数据结构包含在头文件 中任何需要使用标准输入/输出库中函数的程序都必须在源文件中包含这个头文件(通过 指令包含头文件)此文件也被库中的其它函数包含在下面这段典型的 代码段中,只供标准库中其它函数所使用的名字以下划线开始,因此一般不会与用户程序中的名字冲突所有的标

2022-06-12 14:43:27 81

原创 The C Programming Language(第 2 版) 笔记 / 8 UNIX 系统接口 / 8.4 随机访问(lseek)

目录、参考文献输入/输出通常是顺序进行的:每次调用 和 进行读写的位置紧跟在前一次操作的位置之后但是,有时候需要以任意顺序访问文件,系统调用 可以在文件中任意移动位置而不实际读写任何数据:将文件描述符为 的文件的当前位置设置为 ,其中, 是相对于 指定的位置而言的随后进行的读写操作将从此位置开始, 的值可以为 、 或 ,分别用于指定 从文件开始、从当前位置或从文件结束处开始算起例如,为了向一个文件的尾部添加内容(在 UNIX shell 程序中使用重定向符 或在系统调用 中使用参数

2022-06-11 01:29:27 67

原创 The C Programming Language(第 2 版) 笔记 / 8 UNIX 系统接口 / 8.3 open、creat、close、unlink

目录、参考文献除了默认的标准输入、标准输出和标准错误文件外,其它文件都必须在读或写之前显式地打开系统调用 和 用于实现该功能 与第 7 章讨论的 相似不同的是,前者返回一个文件描述符,它仅仅只是一个 类型的数值,而后者返回一个文件指针如果发生错误, 将返回 与 一样,参数 是一个包含文件名的字符串第二个参数 是一个 类型的值,它说明以何种方式打开文件,主要的几个值如下所示:在 System V UNIX 系统中,这些常量在头文件 中定义而在 Berkeley(BSD) 版本中

2022-06-11 01:28:21 80

原创 The C Programming Language(第 2 版) 笔记 / 8 UNIX 系统接口 / 8.2 低级 I/O(read 和 write)

目录、参考文献输入与输出是通过 和 系统调用实现的在 C 语言程序中,可以通过函数 和 访问这两个系统调用这两个函数中,第一个参数是文件描述符,第二个参数是程序中存放读或写的数据的字符数组,第三个参数是要传输的字节数每个调用返回实际传输的字节数在读文件时,函数的返回值可能会小于请求的字节数如果返回值为 ,则表示已到达文件的结尾,如果返回值为 ,则表示发生了某种错误在写文件时,返回值是实际写入的字节数如果返回值与请求写入的字节数不相等,则说明发生了错误在一次调用中,读出或写入的数据的字节

2022-06-11 01:27:00 65

原创 The C Programming Language(第 2 版) 笔记 / 8 UNIX 系统接口 / 8.1 文件描述符

目录、参考文献UNIX 操作系统通过一系列的系统调用提供服务这些系统调用实际上是操作系统内的函数,它们可以被用户程序调用本章将介绍如何在 C 语言程序中使用一些重要的系统调用如果读者使用的是 UNIX,本章将会对你有直接的帮助这是因为,我们经常需要借助于系统调用以获得最高的效率,或者访问标准库中没有的某些功能但是,即使读者是在其它操作系统上使用 C 语言,本章的例子也将会帮助你对 C 语言程序设计有更深入的了解不同系统中的代码具有相似性,只是一些细节上有区别而已因为 ANSI C 标准函数库是

2022-06-11 01:25:22 64

原创 The C Programming Language(第 2 版) 笔记 / 7 输入与输出 / 7.8 其它函数

参考文献:The C Programming Language目录标准库提供了很多功能各异的函数,本节将对其中特别有用的函数做一个简要的概述更详细的信息以及其它许多没有介绍的函数请参见附录 B前面已经提到过字符串函数 、、 和 都在头文件 中定义在下面的各个函数中, 与 为 类型, 与 为 类型头文件 中定义了一些用于字符测试和转换的函数在下面各个函数中, 是一个可表示为 类型或 的 对象该函数的返回值类型为 标准库提供了一个称为 的函数,它与第 4 章中编写的函数 相比功能

2022-06-05 23:41:14 102

原创 The C Programming Language(第 2 版) 笔记 / 7 输入与输出 / 7.7 行输入和行输出

参考文献:The C Programming Language目录标准库提供了一个输入函数 ,它和前面几章中用到的函数 类似 函数从 指向的文件中读取下一个输入行(包括换行符)并将它存放在字符数组 中,它最多可读取 个字符读取的行将以 结尾保存到数组中通常情况下, 返回 ,但如果遇到了文件结尾或发生了错误,则返回 我们编写的 函数返回行的长度,这个值更有用,当它为 时意味着已经到达了文件的结尾输出函数 将一个字符串(不需要包含换行符)写入到一个文件中:如果发生错误,该函数将返回

2022-06-05 21:46:12 77

原创 The C Programming Language(第 2 版) 笔记 / 7 输入与输出 / 7.6 错误处理(stderr 和 exit)

参考文献:The C Programming Language目录 程序的错误处理功能并不完善如果因为某种原因而造成其中的一个文件无法访问,相应的诊断信息要在该连接的输出的末尾才能打印出来当输出到屏幕时,这种处理方法尚可以接受,但如果输出到一个文件或通过管道输出到另一个程序时,就无法接受了为了更好地处理这种情况,另一个输出流以与 和 相同的方式分派给程序,即 即使对标准输出进行了重定向,写到 中的输出通常也会显示在屏幕上下面我们改写 程序,将其出错信息写到标准错误文件上该程序通过两种方式发出

2022-06-05 20:49:02 91

原创 The C Programming Language(第 2 版) 笔记 / 7 输入与输出 / 7.5 文件访问

参考文献:The C Programming Language目录到目前为止,我们讨论的例子都是从标准输入读取数据,并向标准输出输出数据标准输入和标准输出是操作系统自动提供给程序访问的接下来,我们编写一个访问文件的程序,且它所访问的文件还没有连接到该程序程序 可以用来说明该问题,它把一批命名文件串联后输出到标准输出上 可用来在屏幕上打印文件,对于那些无法通过名字访问文件的程序来说,它还可以用作通用的输入收集器例如下列命令行:将在标准输出上打印文件 和 的内容如何设计命名文件的读取过程呢?即如

2022-06-05 20:47:27 84

原创 The C Programming Language(第 2 版) 笔记 / 7 输入与输出 / 7.4 格式化输入(scanf 函数)

参考文献:The C Programming Language目录输入函数 对应于输出函数 ,它在与后者相反的方向上提供同样的转换功能具有变长参数表的函数 的声明形式如下: 函数从标准输入中读取字符序列,按照 中的格式说明对字符序列进行解释,并把结果保存到其余的参数中格式参数 定义解析的规则,其它所有参数都必须是指针,用于指定经格式转换后的相应输入保存的位置在命令行中运行时,C 程序在调用 函数时,如果标准输入中没有未读的值,则程序会阻塞,控制传递给命令行程序命令行中输入非换行符的字符时,

2022-06-05 20:46:02 82

原创 The C Programming Language(第 2 版) 笔记 / 7 输入与输出 / 7.3 变长参数表

参考文献:The C Programming Language目录本节以实现函数 的一个最简单版本为例,介绍如何以可移植的方式编写可处理变长参数表的函数因为我们的重点在于参数的处理,所以,函数 只处理格式字符串和参数,格式转换则通过调用函数 实现函数 的声明形式为 其中,省略号表示参数表中参数的数量和类型是可变的,省略号只能出现在参数表的尾部因为 函数不需要像 函数一样返回实际输出的字符数,因此将它声明为 编写函数 的关键在于如何处理一个甚至连名字都没有的参数表标准头文件 中包含一组宏

2022-06-05 20:45:08 64

原创 The C Programming Language(第 2 版) 笔记 / 7 输入与输出 / 7.2 格式化输出(printf 函数)

参考文献:The C Programming Language目录输出函数 将内部数值转换为字符的形式下面只讲述该函数最典型的用法,附录 B 中给出了该函数完整的描述函数 在输出格式 的控制下,将其参数进行转换与格式化,并在标准输出设备上打印出来它的返回值为打印的字符数格式字符串包含两种类型的对象:普通字符、转换说明在输出时,普通字符将被复制到输出流中,而转换说明并不直接输出到输出流中,而是用于控制 中参数的转换和打印每个转换说明都由一个百分号字符 开始,并以一个转换字符结束在字符 和

2022-06-05 20:43:47 121

原创 The C Programming Language(第 2 版) 笔记 / 7 输入与输出 / 7.1 标准输入/输出

参考文献:The C Programming Language目录输入/输出功能并不是 C 语言本身的组成部分,所以到目前为止,我们并没有过多地强调但是,程序与环境之间的交互比我们在前面部分中描述的情况要复杂很多本章将讲述标准库,介绍一些输入/输出函数、字符串处理函数、存储管理函数与数学函数,以及其它一些 C 语言程序的功能本章讨论的重点将放在输入/输出上ANSI 标准精确地定义了这些库函数,所以,在任何可以使用 C 语言的系统中都有这些函数的兼容形式如果程序的系统交互部分仅仅使用了标准库提供的功能

2022-06-04 15:36:38 136

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除