【问题标题】:Platform independent method to access command line in C? [closed]平台无关的方法来访问 C 中的命令行? [关闭]
【发布时间】:2014-02-04 12:04:30
【问题描述】:

在 Windows 上,程序员可以这样做:system("ls > outputFile.txt")

是否有一种独立于平台的方式来访问命令行,或者至少有一种方法可以确定程序正在哪个平台上执行(因为对相同功能的调用差异很大)?

【问题讨论】:

  • 根据定义,“命令行”功能不是依赖于平台的功能吗?
  • 当然要意识到,如果您在 windows 上运行 system("ls > outputFile.txt"),结果将是 ls is not recognized as an internal or external command...
  • @ScottMermelstein, ls 至少在 Win8 上工作 - 请参阅编辑后的帖子。
  • @sherrellbc 很好,我不知道。作为记录,它不在我的 win7 机器上(也不在我知道的 8 之前的任何 Windows 操作系统上)。
  • “是否有独立于平台的方式来访问命令行”——我认为您的意思是“执行命令行”。是的:system

标签: c windows unix platform-independent


【解决方案1】:

system() 本身是stdlib.h 中定义的标准C 函数。但是,它解释其参数的方式不是标准的(例如,UNIX 中的ls,Windows/DOS 中的dir,等等)。如果你真的问是否有一种独立于平台的方式来列出目录中的文件,答案是(不幸的是)没有。一些库确实提供了可移植(在某种程度上)实现,最著名的是 Boost:How can I get the list of files in a directory using C or C++?

【讨论】:

    【解决方案2】:

    system(3) 函数是标准的 ANSI C,它已经独立于平台。任何符合 C 的实现都将允许您调用它来运行系统默认的命令行处理器/shell 应用程序。当然,您可以运行的实际程序会因系统而异(例如,dir 仅适用于 Windows,而 ls 通常适用于类 Unix 平台)。

    【讨论】:

    • 我明白了。如果程序尝试调用不受支持的命令,是否会在编译时处理?
    • @sherrellbc 不,编译器无法知道什么是“有效”命令。
    • 对。因此,鉴于这些系统调用是内部的(即未打开命令提示符),这些不受支持的调用是否只是通过程序继续传递,就好像它们已正确执行一样?这可能有点难以调试,尤其是当您尝试读取从未创建的 outputFile.txt 时!
    • @sherrellbc " at compile-time" -- 你明白什么是编译时吗?你的问题表明你没有。我建议您查看linux.die.net/man/3/system 处的“返回值”...返回值将在 run 时间而不是 compile 时间进行检查。通过使用非常错误的语言,您会被回复误导。
    • @sherrellbc “这可能有点难以调试”——真的,不。在想象您知道难以调试的东西意味着什么之前,请先获得更多的编程经验。 “尤其是当你试图读取一个从未创建的 outputFile.txt 时!” -- 发现文件不存在很简单。由此,立即推断出它从未被创建。
    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多