夏天不防晒老得快是真的吗

使用 system() 函数(最简方法)

system() 是标准库函数,直接执行字符串形式的DOS命令,适用于简单操作。
步骤:

  1. 包含头文件 <stdlib.h>
  2. 直接传入命令字符串
    int main() {
     // 示例:创建目录并列出文件
     system("mkdir my_folder");     // 创建文件夹
     system("dir /B > file_list.txt"); // 列出文件并保存
     return 0;
    }

    特点:

  • ✅ 优点:简单易用,跨平台(Windows/Linux需调整命令)。
  • ❌ 缺点:无法直接获取命令输出;阻塞当前进程直到命令完成。

使用 _popen() 函数(读取命令输出)

Windows特有的 _popen() 可执行命令并捕获输出,适合需要处理结果的场景。
步骤:

  1. 包含头文件 <stdio.h><stdlib.h>

  2. 使用管道读取命令返回的数据

    #include <stdio.h>
    int main() {
     FILE *pipe;
     char buffer[128];
     // 执行dir命令并读取结果
     pipe = _popen("dir /B", "r");  // "r"表示读取命令输出
     if (pipe == NULL) {
         perror("_popen failed");
         return 1;
     }
     // 逐行读取输出
     while (fgets(buffer, sizeof(buffer), pipe) != NULL) {
         printf("File: %s", buffer); // 打印文件名
     }
     _pclose(pipe); // 关闭管道
     return 0;
    }

    特点:

  • ✅ 优点:可实时获取命令输出。
  • ❌ 缺点:仅适用于Windows;需手动管理管道资源。

使用Windows API(高级控制)

通过 CreateProcess() 等API实现精细控制(如异步执行、隐藏窗口)。
示例(精简版):

#include <windows.h>
int main() {
    STARTUPINFO si = { sizeof(si) };
    PROCESS_INFORMATION pi;
    // 执行"echo Hello, DOS!"命令
    CreateProcess(
        NULL, 
        "cmd.exe /C echo Hello, DOS!", // /C表示执行后关闭
        NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi
    );
    // 等待命令完成
    WaitForSingleObject(pi.hProcess, INFINITE);
    // 释放资源
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    return 0;
}

适用场景:

  • 需要隐藏控制台窗口(设置 STARTF_USESHOWWINDOW)。
  • 异步执行或监控进程状态。

关键安全建议

  1. 命令注入防护
    错误做法:直接拼接用户输入

    char user_input[100];
    scanf("%s", user_input);
    system(user_input); // 危险!用户可输入"del *.*"等恶意命令

    正确做法:校验输入内容,或使用API参数化调用。

  2. 路径处理
    避免使用相对路径,优先转换为绝对路径(如 GetFullPathName())。
  3. 权限控制
    敏感操作(如删除文件)需确认用户权限。

方法对比

方法 适用场景 输出捕获 复杂度
system() 快速执行简单命令
_popen() 需读取输出(Windows专属)
Windows API 精细控制进程

  • 日常任务推荐 system(),简单高效。
  • 需处理输出时用 _popen()
  • 开发大型应用或需隐藏窗口时选择Windows API。
    始终牢记: 对外部输入严格过滤,避免执行未经验证的命令。

引用说明:本文代码示例参考微软官方文档《CRT函数库》和《Windows API指南》,安全建议基于OWASP命令注入防护标准,实践前请确保开发环境为Windows并配置C编译器(如MSVC/MinGW)。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5272.html

(0)
酷番叔酷番叔
上一篇 2025年6月22日 04:31
下一篇 2025年6月22日 05:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信