system() 函数在 C++ 中的使用

system() 是 C++ 标准库中的一个函数,用于执行操作系统命令或程序。它通过调用命令处理器(如 Windows 的 CMD 或 Linux 的 Shell)来运行指定的命令。

功能一:执行系统命令

在 Windows 系统中,system() 函数可以调用的文件 / 目录操作命令主要依赖于 Windows 命令行(cmd.exe)支持的命令。以下是 Windows 中常用的文件和目录操作命令,均可通过 system() 函数执行:

  1. 目录查看与切换

    • dir:列出当前目录中的文件和子目录
    • cd [路径]:切换到指定目录(如 cd C:\Users
    • cd..:切换到上一级目录
    • cd\:切换到当前磁盘的根目录
    • tree [路径]:以树形结构显示目录内容
  2. 目录创建与删除

    • md [目录名] 或 mkdir [目录名]:创建新目录
    • rd [目录名] 或 rmdir [目录名]:删除空目录
    • rd /s [目录名]:删除非空目录(包括所有子文件和子目录)
    • rd /s /q [目录名]:静默删除非空目录(无确认提示)
  3. 文件创建与删除

    • type nul > [文件名]:创建空文件(如 type nul > test.txt
    • copy con [文件名]:创建并编辑文本文件(按 Ctrl+Z 结束)
    • del [文件名]:删除指定文件
    • del /f [文件名]:强制删除只读文件
    • del /q [文件名]:静默删除文件(无确认提示)
    • del *.txt:删除当前目录中所有 .txt 类型的文件
  4. 文件 / 目录复制

    • copy [源文件] [目标路径]:复制文件(如 copy a.txt D:\temp\
    • copy [文件1] [文件2] [目标路径]:复制多个文件到目标路径
    • xcopy [源路径] [目标路径]:复制目录及其中的文件(更强大的复制命令)
    • xcopy /s:复制所有子目录(除空目录外)
    • xcopy /e:复制所有子目录(包括空目录)
  5. 文件 / 目录移动与重命名

    • move [源路径] [目标路径]:移动文件或目录
    • move [旧文件名] [新文件名]:重命名文件或目录(同一目录下)
  6. 文件属性操作

    • attrib [文件名]:查看文件属性
    • attrib +r [文件名]:设置文件为只读属性
    • attrib -h [文件名]:取消文件的隐藏属性
    • attrib +s [目录名]:将目录设置为系统目录
  7. 其他相关命令

    • ren [旧名] [新名]:重命名文件或目录(同 move 的重命名功能)
    • replace [源文件] [目标路径]:替换目标路径中的同名文件
    • xcopy /h:复制隐藏文件和系统文件
    • del /s *.tmp:删除当前目录及子目录中所有 .tmp 临时文件
  8. 示例代码

#include <cstdlib>  // 包含 system() 函数

int main() {
    // 创建目录
    system("mkdir test_dir");
    
    // 在新目录中创建文件
    system("echo hello > test_dir\\test.txt");
    
    // 查看目录内容
    system("dir test_dir");
    
    // 复制文件
    system("copy test_dir\\test.txt .\\copied.txt");
    
    // 删除文件和目录
    system("del test_dir\\test.txt");
    system("rd test_dir");
    
    return 0;
}

功能二:系统信息

在 Windows 系统中,system() 函数可以调用一系列命令来获取系统信息,这些命令通过 cmd.exe 执行并返回相应的系统数据。以下是可通过 system() 调用的主要系统信息命令:

1. 系统版本与基础信息

  • ver:显示当前 Windows 系统版本号(如 Windows 10/11 版本信息)
  • winver:打开图形化窗口显示详细系统版本信息
  • systeminfo:列出完整的系统配置信息,包括:
    • 操作系统名称、版本、制造商、安装日期
    • 系统型号、处理器、内存(物理 / 虚拟)
    • BIOS 版本、系统目录、启动设备等

2. 硬件信息

  • wmic cpu get name,NumberOfCores,NumberOfLogicalProcessors:获取 CPU 信息(名称、核心数、逻辑处理器数)
  • wmic memorychip get capacity:显示物理内存芯片容量
  • wmic diskdrive get model,size:获取磁盘驱动器型号和容量
  • wmic path win32_videocontroller get name:查看显卡信息
  • wmic baseboard get product,manufacturer:获取主板信息(型号、制造商)

3. 进程与服务

  • tasklist:列出当前运行的所有进程及 PID(进程标识符)
  • tasklist /svc:显示每个进程关联的服务
  • sc query:列出所有系统服务及其状态(运行 / 停止)
  • sc queryex [服务名]:查看指定服务的详细信息(如 sc queryex wuauserv 查看 Windows 更新服务)

4. 用户与账户信息

  • whoami:显示当前登录用户的用户名
  • net user:列出系统中所有用户账户
  • net user [用户名]:查看指定用户的详细信息(如密码状态、权限等)
  • net localgroup:列出所有本地用户组
  • net localgroup administrators:查看管理员组成员

5. 网络信息

  • ipconfig:显示所有网络适配器的 IP 配置(IP 地址、子网掩码、网关)
  • ipconfig /all:显示详细网络信息(包括 MAC 地址、DNS 服务器、DHCP 状态等)
  • netstat -an:列出所有活跃的网络连接及端口状态
  • arp -a:显示本地 ARP 缓存(IP 与 MAC 地址映射)
  • route print:显示本地路由表

6. 启动与事件日志

  • msconfig:打开系统配置窗口(可查看启动项、服务等)
  • eventvwr:打开事件查看器(系统日志、应用日志等)
  • wmic startup get caption,command:列出系统启动项及其路径

使用示例

#include <cstdlib>  // 包含 system() 函数

int main() {
    // 显示系统版本
    system("ver");
    
    // 查看详细系统信息(会输出大量内容)
    system("systeminfo");
    
    // 显示 CPU 信息
    system("wmic cpu get name,NumberOfCores");
    
    // 查看 IP 配置
    system("ipconfig /all");
    
    // 列出运行中的进程
    system("tasklist");
    
    return 0;
}

功能三:网络相关

在 Windows 系统中,system() 函数可以调用一系列网络相关的命令,这些命令通过命令提示符(cmd.exe)执行,用于查询、配置和诊断网络状态。以下是可通过 system() 调用的主要网络相关命令:

1. 网络配置查询

  • ipconfig:显示所有网络适配器的基本 IP 配置(IP 地址、子网掩码、默认网关)
  • ipconfig /all:显示详细网络配置(包括 MAC 地址、DNS 服务器、DHCP 服务器、租约期限等)
  • ipconfig /release:释放指定网络适配器的 DHCP 分配的 IP 地址
  • ipconfig /renew:重新从 DHCP 服务器获取 IP 地址
  • ipconfig /flushdns:清空 DNS 缓存
  • ipconfig /displaydns:显示当前 DNS 缓存内容
  • ipconfig /registerdns:刷新 DNS 客户端注册的 DNS 记录

2. 网络连接测试

  • ping [目标]:向目标主机发送 ICMP 回声请求以测试网络连通性(如 ping www.baidu.com 或 ping 192.168.1.1
  • ping -t [目标]:持续发送 ping 请求,直到手动终止(按 Ctrl+C 停止)
  • ping -n [次数] [目标]:指定发送 ping 请求的次数(如 ping -n 10 192.168.1.1
  • ping -l [大小] [目标]:指定 ping 数据包大小(如 ping -l 1024 www.google.com
  • tracert [目标]:跟踪数据包从本地到目标主机的路由路径(显示每一跳的 IP 和延迟)
  • pathping [目标]:结合 ping 和 tracert 功能,显示路径上每个节点的丢包率

3. 网络连接与端口查看

  • netstat:显示当前活动的网络连接、监听端口和网络统计信息
  • netstat -a:显示所有活动连接和监听的端口(包括 TCP 和 UDP)
  • netstat -n:以数字形式显示 IP 地址和端口(不解析域名)
  • netstat -o:显示每个连接对应的进程 PID(可结合任务管理器查看进程)
  • netstat -ano:常用组合,显示所有连接(数字形式)及对应 PID
  • netstat -r:显示本地路由表
  • netstat -e:显示网络接口的统计信息(如字节发送 / 接收量)

4. 网络服务与共享

  • net start:列出当前运行的网络服务
  • net stop [服务名]:停止指定的网络服务(如 net stop lanmanserver 停止文件共享服务)
  • net share:显示当前系统的共享资源(包括共享文件夹和打印机)
  • net share [共享名]:查看指定共享资源的详细信息
  • net use:显示当前映射的网络驱动器和连接
  • net use [盘符]: \\[主机名]\[共享名]:映射网络共享到本地盘符

5. ARP 与路由配置

  • arp -a:显示本地 ARP 缓存表(IP 地址与 MAC 地址的映射关系)
  • arp -s [IP] [MAC]:手动添加静态 ARP 条目(如 arp -s 192.168.1.1 00-1A-2B-3C-4D-5E
  • arp -d [IP]:删除指定的 ARP 缓存条目
  • route print:显示本地路由表
  • route add [目标网络] mask [子网掩码] [网关]:添加静态路由(如 route add 10.0.0.0 mask 255.0.0.0 192.168.1.1
  • route delete [目标网络]:删除指定的路由条目

6. 远程连接与管理

  • telnet [主机] [端口]:通过 Telnet 协议连接到远程主机的指定端口(需先启用 Telnet 客户端)
  • mstsc:打开远程桌面连接工具
  • netsh:网络配置命令行工具(功能强大,可用于配置防火墙、无线等,如 netsh firewall show allprofiles 查看防火墙配置)

代码实例

#include <cstdlib>  // 包含 system() 函数

int main() {
    // 查看详细 IP 配置
    system("ipconfig /all");
    
    // 测试与百度的连通性
    system("ping www.baidu.com -n 5");
    
    // 跟踪到目标主机的路由
    system("tracert www.baidu.com");
    
    // 显示所有网络连接及对应进程 PID
    system("netstat -ano");
    
    // 清空 DNS 缓存
    system("ipconfig /flushdns");
    
    return 0;
}

其他

在 Windows 系统中,system() 函数除了文件 / 目录操作、系统信息和网络相关命令外,还可以调用许多其他实用命令,涵盖系统管理、进程控制、设备操作等多个领域。

1. 系统工具与配置

  • control:打开控制面板(图形化界面)
  • msconfig:打开系统配置窗口(可设置启动项、服务、引导选项等)
  • regedit:打开注册表编辑器(用于修改系统注册表)
  • gpedit.msc:打开本地组策略编辑器(需专业版 / 企业版系统,用于配置系统策略)
  • diskmgmt.msc:打开磁盘管理工具(分区管理、磁盘格式化等)
  • services.msc:打开服务管理窗口(查看 / 启动 / 停止系统服务)
  • taskmgr:打开任务管理器(查看进程、性能、启动项等)
  • eventvwr.msc:打开事件查看器(查看系统日志、应用日志、安全日志)
  • devmgmt.msc:打开设备管理器(查看 / 管理硬件设备及驱动)

2. 进程与任务管理

  • taskkill /pid [进程ID]:终止指定 PID 的进程(如 taskkill /pid 1234
  • taskkill /im [进程名]:通过进程名终止进程(如 taskkill /im notepad.exe
  • taskkill /f /im [进程名]:强制终止进程(如 taskkill /f /im chrome.exe
  • start [程序路径]:启动指定程序(如 start notepad.exe 打开记事本,start https://www.baidu.com 用默认浏览器打开网页)
  • timeout /t [秒数]:暂停程序执行指定秒数(如 timeout /t 5 暂停 5 秒)
  • shutdown /s /t 0:立即关机
  • shutdown /r /t 0:立即重启
  • shutdown /h:使系统进入休眠状态

3. 磁盘与存储操作

  • chkdsk [盘符:]:检查磁盘错误(如 chkdsk C:
  • chkdsk [盘符:] /f:修复磁盘错误(需重启时执行)
  • format [盘符:]:格式化指定磁盘(如 format D:,会提示确认)
  • format [盘符:] /q:快速格式化磁盘
  • diskpart:磁盘分区命令行工具(功能强大,需谨慎使用,如创建 / 删除分区)
  • vol:显示当前磁盘的卷标和序列号
  • label [盘符:] [卷标名]:设置磁盘卷标(如 label D: 资料盘

4. 环境变量与路径

  • set:显示当前用户的环境变量
  • set [变量名]:查看指定环境变量的值(如 set PATH 查看系统路径)
  • set [变量名]=[值]:临时设置环境变量(仅在当前命令行窗口有效)
  • echo %[变量名]%:打印环境变量的值(如 echo %USERNAME% 显示当前用户名)

5. 其他实用命令

  • cls:清空命令行窗口内容
  • date:显示或修改系统日期
  • time:显示或修改系统时间
  • title [窗口标题]:修改命令行窗口标题(如 title 我的程序
  • color [前景色][背景色]:修改命令行窗口的文字和背景颜色(如 color 0A 表示黑色背景 + 绿色文字)
  • help:显示所有命令的简要帮助
  • [命令] /?:显示指定命令的详细帮助(如 ping /?taskkill /?
  • calc:打开计算器
  • mspaint:打开画图工具
  • write:打开写字板

代码演示

#include <cstdlib>  // 包含 system() 函数

int main() {
    // 打开任务管理器
    system("taskmgr");
    
    // 清空命令行窗口
    system("cls");
    
    // 显示环境变量 PATH
    system("echo %PATH%");
    
    // 5 秒后自动关机(可通过 shutdown /a 取消)
    system("shutdown /s /t 5");
    
    // 打开注册表编辑器
    system("regedit");
    
    return 0;
}

注意事项

如果需要在程序中结构化地获取系统信息,建议使用 Windows API(如 GetSystemInfoGetComputerName 等),而非依赖 system() 调用命令行工具。

这些命令覆盖了 Windows 系统中大部分网络查询、诊断和配置功能,可根据具体需求通过 system() 函数调用。

这些命令覆盖了 Windows 系统中日常操作和系统管理的大部分场景,通过 system() 函数可以快速调用它们实现特定功能。

  1. 路径分隔符在 Windows 中使用 \,但在 C++ 字符串中需要转义为 \\
  2. 部分命令需要管理员权限才能执行(如操作系统目录)
  3. 避免直接使用用户输入构造命令字符串,以防命令注入攻击
  4. 对于跨平台需求,建议使用 C++17 引入的 <filesystem> 库替代系统命令
  5. 部分命令(如 systeminfowmic)可能需要管理员权限才能获取完整信息
  6. 命令输出内容较多时,可通过重定向保存到文件(如 system("systeminfo > sysinfo.txt")
  7. wmic 命令功能强大但语法较复杂,可通过 wmic /? 查看完整帮助
  8. 这些命令依赖 Windows 系统,在其他操作系统(如 Linux)上无法使用
  9. 部分命令(如修改路由、停止服务)需要管理员权限才能执行
  10. telnet 命令默认可能未安装,需在 Windows 功能中手动启用
  11. 复杂网络配置建议使用 netsh 工具,但其语法较复杂,可通过 netsh /? 查看帮助
  12. 避免在程序中过度依赖这些命令,如需结构化处理网络信息,建议使用 Windows 网络 API(如 Winsock)
  13. 涉及系统配置(如 regeditdiskpart)和敏感操作(如 formatshutdown)的命令需谨慎使用,错误操作可能导致数据丢失或系统故障。
  14. 部分命令(如 gpedit.msc)仅在 Windows 专业版、企业版等版本中可用,家庭版可能不支持。
  15. 图形化工具(如 controltaskmgr)调用后会打开独立窗口,system() 函数会等待窗口关闭后才继续执行后续代码。
  16. 尽量避免在程序中依赖这些命令完成核心功能,如需深度系统交互,建议使用 Windows API(如进程管理用 CreateProcess、注册表操作用 RegOpenKeyEx 等)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值