system() 是 C++ 标准库中的一个函数,用于执行操作系统命令或程序。它通过调用命令处理器(如 Windows 的 CMD 或 Linux 的 Shell)来运行指定的命令。
功能一:执行系统命令
在 Windows 系统中,system() 函数可以调用的文件 / 目录操作命令主要依赖于 Windows 命令行(cmd.exe)支持的命令。以下是 Windows 中常用的文件和目录操作命令,均可通过 system() 函数执行:
-
目录查看与切换
dir:列出当前目录中的文件和子目录cd [路径]:切换到指定目录(如cd C:\Users)cd..:切换到上一级目录cd\:切换到当前磁盘的根目录tree [路径]:以树形结构显示目录内容
-
目录创建与删除
md [目录名]或mkdir [目录名]:创建新目录rd [目录名]或rmdir [目录名]:删除空目录rd /s [目录名]:删除非空目录(包括所有子文件和子目录)rd /s /q [目录名]:静默删除非空目录(无确认提示)
-
文件创建与删除
type nul > [文件名]:创建空文件(如type nul > test.txt)copy con [文件名]:创建并编辑文本文件(按 Ctrl+Z 结束)del [文件名]:删除指定文件del /f [文件名]:强制删除只读文件del /q [文件名]:静默删除文件(无确认提示)del *.txt:删除当前目录中所有.txt类型的文件
-
文件 / 目录复制
copy [源文件] [目标路径]:复制文件(如copy a.txt D:\temp\)copy [文件1] [文件2] [目标路径]:复制多个文件到目标路径xcopy [源路径] [目标路径]:复制目录及其中的文件(更强大的复制命令)xcopy /s:复制所有子目录(除空目录外)xcopy /e:复制所有子目录(包括空目录)
-
文件 / 目录移动与重命名
move [源路径] [目标路径]:移动文件或目录move [旧文件名] [新文件名]:重命名文件或目录(同一目录下)
-
文件属性操作
attrib [文件名]:查看文件属性attrib +r [文件名]:设置文件为只读属性attrib -h [文件名]:取消文件的隐藏属性attrib +s [目录名]:将目录设置为系统目录
-
其他相关命令
ren [旧名] [新名]:重命名文件或目录(同move的重命名功能)replace [源文件] [目标路径]:替换目标路径中的同名文件xcopy /h:复制隐藏文件和系统文件del /s *.tmp:删除当前目录及子目录中所有.tmp临时文件
-
示例代码
#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:常用组合,显示所有连接(数字形式)及对应 PIDnetstat -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(如 GetSystemInfo、GetComputerName 等),而非依赖 system() 调用命令行工具。
这些命令覆盖了 Windows 系统中大部分网络查询、诊断和配置功能,可根据具体需求通过 system() 函数调用。
这些命令覆盖了 Windows 系统中日常操作和系统管理的大部分场景,通过 system() 函数可以快速调用它们实现特定功能。
- 路径分隔符在 Windows 中使用
\,但在 C++ 字符串中需要转义为\\ - 部分命令需要管理员权限才能执行(如操作系统目录)
- 避免直接使用用户输入构造命令字符串,以防命令注入攻击
- 对于跨平台需求,建议使用 C++17 引入的
<filesystem>库替代系统命令 - 部分命令(如
systeminfo、wmic)可能需要管理员权限才能获取完整信息 - 命令输出内容较多时,可通过重定向保存到文件(如
system("systeminfo > sysinfo.txt")) wmic命令功能强大但语法较复杂,可通过wmic /?查看完整帮助- 这些命令依赖 Windows 系统,在其他操作系统(如 Linux)上无法使用
- 部分命令(如修改路由、停止服务)需要管理员权限才能执行
telnet命令默认可能未安装,需在 Windows 功能中手动启用- 复杂网络配置建议使用
netsh工具,但其语法较复杂,可通过netsh /?查看帮助 - 避免在程序中过度依赖这些命令,如需结构化处理网络信息,建议使用 Windows 网络 API(如 Winsock)
- 涉及系统配置(如
regedit、diskpart)和敏感操作(如format、shutdown)的命令需谨慎使用,错误操作可能导致数据丢失或系统故障。 - 部分命令(如
gpedit.msc)仅在 Windows 专业版、企业版等版本中可用,家庭版可能不支持。 - 图形化工具(如
control、taskmgr)调用后会打开独立窗口,system()函数会等待窗口关闭后才继续执行后续代码。 - 尽量避免在程序中依赖这些命令完成核心功能,如需深度系统交互,建议使用 Windows API(如进程管理用
CreateProcess、注册表操作用RegOpenKeyEx等)。
1544

被折叠的 条评论
为什么被折叠?



