Linux IO编程 搭建开发环境 学习笔记

news2026/4/16 14:26:03
虚拟机网络模式配置 Ubuntu 联网时稳定的网络连接是基础前提!虚拟机里的这些网络模式(桥接、NAT、仅主机、自定义、LAN段)决定了 Ubuntu 虚拟机如何跟主机、外部网络打通选对模式既能让 Ubuntu 联网装软件又能让主机顺利实现远程模式核心特点外网访问能力与主机通信能力典型应用场景桥接模式虚拟机与主机共享物理网卡获取同网段 IP可直接访问外网同一网段可双向通信需对外提供服务时用如搭建 Web 服务器、与其他设备互相访问等NAT 模式虚拟机用私有 IP流量经主机 NAT 转发可访问外网依赖主机 NAT 转发天然互通无需额外配置开发首选如快速联网装环境、主机直连 SSH 等仅主机模式虚拟机连封闭虚拟网卡与外网完全隔离无法访问外网同一虚拟网络可双向通信本地隔离测试如单机服务调试、数据不对外的开发环境等自定义模式指定 VMnet1/8/0灵活配网络取决于所选虚拟网络取决于所选虚拟网络复杂场景如多虚拟网卡协同、特定协议模拟等LAN 区段多虚拟机连专属虚拟网卡区段外无法访问默认无法访问外网默认无法通信模拟复杂网络如多虚拟机模拟服务器集群测试内部通信等日常开发(尤其是个人/常规项目开发)中NAT 模式和桥接模式因适配开发需求、配置简单使用频率远高于其他模式仅主机、自定义、LAN 区段模式受场景限制很少在常规开发流程中用到;对比维度NAT 模式桥接模式网络原理虚拟机借主机网络“转发”上网类似连热点虚拟机与主机平级连物理网络类似插网线IP配置自动分配无需手动需手动设同网段 IP易冲突联网复杂度选模式即联网零配置需配 IP / 网关 / DNS易出错VS Code远程连接天然互通填 IP 直连需确保 IP 同网段且不冲突开发适配场景首选日常写代码、装环境、远程开发需对外提供服务如虚拟机搭网站供手机访问安全隔离性虚拟机藏于主机内网防外部干扰暴露在物理网络易被局域网设备访问NAT网段计算在 VMware 虚拟机环境中NAT 模式的网段由宿主机虚拟网卡(VMnet8)的网络配置决定NAT网段计算• 定位虚拟网卡查看 Windows 主机中 VMware Network Adapter VMnet8 的网络属性• 获取关键参数获取 IP 地址及子网掩码• 计算网段地址网段 虚拟网卡IP 按位与() 子网掩码以 192.168.159.1/24 网段为例(子网掩码 255.255.255.0)整个网段的 IP 范围为 192.168.159.0 ~192.168.159.255 但需严格区分可用主机地址与特殊地址• 可用主机地址192.168.159.3 ~ 192.168.159.254(共252个可用地址),这些地址未被系统占用可安全分配给虚拟机作为静态 IP• 特殊地址特殊地址不可进行分配地址用途说明能否给虚拟机(Ubuntu)用192.168.159.0网段标识地址不能纯标识网段用192.168.159.1宿主机虚拟网卡地址VMnet8不能已被主机占用冲突必断网192.168.159.2NAT 网关地址转发流量用不能已被系统占用不能分配192.168.159.255广播地址给全网段发消息不能用了会导致网段内设备混乱配置 Ubuntu NAT 联网流程确认Windows环境 NAT 网段在Windows操作系统中借助VMware虚拟网络适配器(VMnet8)相关设置查询并记录 NAT 模式下的网段信息(含 IP 地址、子网掩码等)为后续Ubuntu配置提供网络参数依据Ubuntu系统网络配置• 选定网络模式将 Ubuntu 网络连接模式指定为 NAT 模式使虚拟机可借助主机网络转发机制访问外部网络• 配置静态IP地址需确保配置的静态IP地址处于 Windows 端得到的 NAT 网段可用范围内保证网络通信正常• 验证静态 IP 配置通过查看网络信息指令(ip addr)检查静态 IP 地址是否生效、网络参数是否正确等等确保 Ubuntu 可正常上网配置Ubuntu SSH免密登录流程更新软件源同步系统软件源信息确保后续安装软件版本最新sudo apt updateSSH服务部署• 安装 OpenSSH 服务为远程连接提供基础支持sudo apt install openssh-server• 启动 SSH 服务启动服务使 Ubuntu 具备接收 SSH 连接的能力sudo systemctl start ssh• 设置开机自启动配置服务开机自动启动避免系统重启后需手动启动sudo systemctl enable ssh• 验证服务状态检查服务运行状态确保服务正确启动(状态显示active(running)为正常)sudo systemctl status ssh生成密钥对分别在 Windows 和 Ubuntu 系统生成 SSH 密钥对(用于加密认证)• Windows 端打开命令提示符执行以下命令生成密钥对ssh-keygen• Ubuntu 端打开终端执行以下命令生成密钥对ssh-keygen公钥互信配置• 新建授权文件( Ubuntu 端)用于存储公钥文件名固定touch ~/.ssh/authorized_keys• 追加 Windows 公钥Windows 系统生成的公钥文件粘贴到 Ubuntu 系统的新建授权文件中• 追加 Ubuntu 公钥将自身公钥也追加到授权文件实现双向免密(可选按需配置)网络连通性验证与远程登录• ping 测试在 Windows 命令提示符中执行以下命令测试与 Ubuntu 系统的网络连通性ping Ubuntu的IP地址• SSH 远程登录若网络连通执行以下命令通过 SSH 登录 Ubuntu 系统首次登录需输入 yes 确认完成认证后即可进入 Ubuntu 主目录实现免密远程访问ssh Ubuntu用户名Ubuntu的IP地址linux操作系统分层结构IO介绍IO概述IO(Input/Output)是计算机系统中数据在不同实体间传输交互的抽象过程涵盖程序与外部设备(如文件、硬件、网络)的数据读写行为。本质上它是程序与外部环境建立“数据通道”的核心机制支撑着程序获取输入、输出结果的基本逻辑是软件与硬件、本地与远程交互的底层依托IO作用IO 是程序与外部环境交互的基础桥梁。一方面它为程序提供 “输入” 能力支撑程序从文件、硬件、网络获取运行所需的数据(如游戏加载资源文件、程序读取用户输入)另一方面通过 “输出” 功能程序可将计算结果持久化存储(如写入日志文件)、可视化展示(如输出到终端)或远程传输(如网络数据发送)IO种类可从实现层级和应用场景两个维度分类• 按实现层级分类• 系统调用IO也称之为文件IO直接对接操作系统内核的最底层接口逻辑极简、性能接近硬件但是需要手动处理缓冲区、错误码等细节• 库函数IO也称之为标准IO基于系统调用封装的高层接口自动管理缓冲区、跨平台兼容、简化开发是用户态程序的常用选择;按应用场景分类• 文件 IO针对磁盘文件的读写(如日志记录、配置文件操作).可通过“系统调用”或“库函数”实现;• 设备 IO与硬件设备交互(如键盘输入、显示器输出).操作系统通过“设备抽象”将设备转换为文件系统中的特殊文件使程序能用统一的文件操作接口访问所有硬件这正是 Linux“一切皆文件”理念的核心• 网络 IO实现网络数据收发(如浏览器访问网页、APP通讯).依赖系统调用或者是更高层的框架对比维度系统调用库函数层级定位操作系统内核提供的底层接口如open基于系统调用 / 纯用户逻辑封装的高层工具如 C 标准库fopen运行空间运行于内核空间需切换 CPU 特权级用户态 → 内核态运行于用户空间无需特权级切换功能本质直接操作硬件 / 内核资源如读写磁盘、创建进程① 封装系统调用实现复杂功能如printf调用write② 纯用户态逻辑如strlen计算字符串长度性能开销因“用户态 ↔ 内核态”切换开销较大① 若封装系统调用开销略低减少切换次数② 纯用户态函数开销极小移植性依赖操作系统内核移植性差如 Linux 与 Windows 系统调用不同跨平台库如 C 标准库移植性好同一函数适配多系统标准IO介绍定义标准 I/O 是 C 库提供的输入输出函数集合由 ANSI C 标准统一规范为跨平台 IO 操作奠定基础跨平台性在UNIX 系统、Windows系统、Linux 等多系统操作均实现标准 I/O 库让代码跨平台开发更顺畅高效实现原理通过缓冲机制(内存临时存储数据)减少直接系统调用次数降低硬件交互开销提升 IO效率易用性设计基于系统底层调用封装屏蔽复杂硬件操作开发者无需关注设备细节简单调用函数即可完成 IO流(stream)定义所有 I/O 操作抽象为字节的“移入/移出”程序的过程这种字节流动形态称为流。分类• 文件流按字符编码(如 ASCII、UTF-8)处理注重文本语义• 二进制流直接操作原始字节保留数据原始形态(如图片、可执行文件)默认打开的流• stdin标准输入流(如键盘输入)• stdout标准输出流(如屏幕打印)• stderr标准错误流(专用于输出错误信息)FILE对象定义FILE 对象是一个结构体用于存储文件或流相关的所有状态信息(如文件描述符、缓冲区大小、缓冲区当前位置、文件结束标志等等)FILE对象与流对应关系• 每个流在内存中由一个 FILE 对象表示通过 FILE* 指针访问标准流的特殊 FILE 对象• stdin是标准输入流对应的 FILE 对象指针通常关联到键盘输入• stdout是标准输出流对应的 FILE 对象指针通常关联到控制台输出• stderr是标准错误流对应的 FILE 对象指针。通常关联到控制台用于输出错误信息由于 FILE 对象通常较大且内部结构复杂标准 I/O 函数不直接操作FILE对象本身而是通过FILE 指针(FILE*)来间接访问。FILE 指针是指向 FILE 对象的内存地址所有文件操作如打开、读写、关闭都基于这个指针进行FILE指针创建与销毁通过fopen( )进行创建FILE指针通过fclose( )进行销毁FILE指针FILE指针操作所有标准 I/O 函数都以 FILE 指针作为参数常见操作包括读写操作、定位操作、错误检查等等FILE 对象与底层系统调用的关系FILE 对象是标准库层面的抽象而 Linux 内核通过文件描述符如 0、1、2 对应标准输入 / 输出 / 错误管理文件。FILE 对象内部维护了一个文件描述符将标准 I/O 函数映射到底层系统调用如 read()、write()并提供缓冲区优化系统头文件tags生成及vim验证为系统头文件(/usr/include)生成tags索引让vim可快速跳转、检索头文件中的函数、类型、宏等man手册使用方式man手册是用于在linux系统中查询命令、函数等的帮助手册不同的章节分类便于快速定位获取各类linux系统相关的帮助信息以下是一些常用用法• man man查看man手册自身的章节说明了解man手册整体架构和使用规范• man 1 要查看的内容查看可执行程序或shell命令的帮助文档“1”对应用户命令章节• man 2 要查看的内容查看系统调用(内核提供的函数)相关帮助“2”对应系统调用章节• man 3 要查看的内容查看库调用(库中的函数)“3”对应库函数章节......fopen函数项目详细说明所需头文件#include stdio.h原型FILE *fopen(const char *pathname, const char *mode);功能用标准 I/O 的方式打开文件参数pathname文件路径和名字。不写路径默认打开当前路径下的文件。mode打开文件的方式-r只读光标定位到文件开头文件不存在则报错。-r读写光标定位到文件开头文件不存在则报错。-w只写文件存在则清空不存在则创建光标定位到开头。-w读写文件存在则清空不存在则创建光标定位到开头。-a追加只写文件不存在则创建存在则不清空光标定位到结尾。-a读和追加文件不存在则创建存在则不清空读操作时光标在文件开头写操作总是在文件结尾。返回值成功返回FILE指针失败返回NULL并设置错误码fclose函数项目内容所需头文件#include stdio.h原型int fclose(FILE *stream);功能用标准IO的方式关闭文件参数stream文件指针返回值成功返回0失败返回EOF-1并重置错误码错误码的原理在Linux系统中内核通过预定义宏(如 ENOENT)标识错误错误码为正整数内核返回时用负数传递错误码转换为错误信息-strerror函数项目内容所需头文件#include string.h原型char *strerror(int errnum);功能将错误码转换为错误信息参数errnum错误码返回值成功返回指向错误信息的字符串指针若errnum无效返回结果由系统实现决定通常返回通用错误描述如Unknown error nnn错误信息打印函数-perror函数项目内容所需头文件#include stdio.h原型void perror(const char *s);功能打印错误信息。如果s不为NULL且*s不为空字节\0则先打印参数字符串s后跟一个冒号和一个空格然后打印与当前errno值对应的错误消息和一个换行符。参数s用户的附加信息。• 若s非空s ! NULL且*s ! \0则输出s:字符串 冒号 空格。• 若s为空s NULL或*s \0则不同系统可能输出“: 错误信息”或直接输出“错误信息”。返回值无voidfgetc函数项目内容所需头文件#include stdio.h原型int fgetc(FILE *stream);功能从文件流中读取当前位置的字符。每次调用fgetc会自动移动文件指针指向下一个字符位置为后续读取做准备。参数stream文件指针返回值成功返回无符号字符unsigned char的数值范围 0~255并转换为int返回。若返回char255unsigned char会被视为 -1signed char与EOF冲突。失败或读到文件结束返回EOF-1。fputc函数项目内容所需头文件#include stdio.h原型int fputc(int c, FILE *stream);功能向文件中写入一个字符参数c要写入的字符stream文件指针返回值成功返回写入的字符的ASCII码失败返回EOFfgets函数项目内容所需头文件#include stdio.h原型char *fgets(char *s, int size, FILE *stream);功能从stream指向的文件中读取字符串存入s指向的缓冲区最多读取size-1个字符包含可能的换行符\n自动在末尾添加\0遇到 EOF 或\n时停止若因\n停止则\n也会被存入s。参数-s存放读取内容的内存首地址-size想要读取的字节数-stream文件指针返回值- 成功返回s即读取到的字符串地址- 失败或读到文件结束返回NULLfputs函数项目内容所需头文件#include stdio.h原型int fputs(const char *s, FILE *stream);功能将字符串s的内容写入到stream指向的文件中仅写入字符串有效字符不包含末尾\0参数s要写入字符串的首地址stream文件指针返回值成功返回非负整数失败返回EOF-1

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…