You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux系统删除/tmp/san.txt:两种C语言实现方案哪个更优?

哪种C语言删除文件的方案更好?

我需要删除/tmp/san.txt文件,目前有两种C语言实现方案,请问哪种方案更好?原因是什么?

方案一代码

int main(){ 
    int status; 
    pid_t pid = fork(); 
    if(-1 == pid){ 
        printf("fork() failed"); 
        exit(EXIT_FAILURE); 
    }else if(pid == 0){ 
        execl("/bin/sh", "sh", "-c", "rm /tmp/san.txt", (char *) NULL); 
    }else{ 
        printf("[%d]fork with id %d\n",pid); 
        waitpid(pid,&status,0); 
    } 
    return 0; 
}

方案二代码

int main(){ 
    int ret = unlink("/tmp/san.txt"); 
    if ( 0 == ret){ 
        printf("file removed \n"); 
    } 
    return 0; 
}

毫无疑问,方案二是更优的选择,原因主要有这几点:

  • 性能碾压级优势:方案一要走「创建子进程(fork)→ 加载shell程序(execl)→ shell解析并执行rm命令」一整套流程,每一步都有额外开销;而方案二直接调用unlink()(底层是系统调用),一步到位完成文件删除,资源消耗小得多。

  • 可靠性拉满:方案一依赖系统里的shell环境(比如/bin/sh是否存在、rm命令的路径是否正确),如果环境异常(比如嵌入式系统里没有完整shell),代码直接失效;而unlink()是标准POSIX接口,只要是符合POSIX标准的系统都能正常工作,依赖极少。

  • 代码简洁好维护:方案二逻辑一目了然,几行代码就完成核心功能;方案一涉及进程创建、子进程管理,逻辑更复杂,后续维护或者排查问题都更麻烦。

  • 错误处理更直接:方案二可以通过unlink()的返回值直接判断是否成功,还能通过errno拿到具体错误原因(比如文件不存在、权限不足);方案一得解析子进程的退出状态才能知道rm命令执行结果,过程繁琐且不够直观。

内容的提问来源于stack exchange,提问作者Sandeep_black

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:22:22