【问题标题】:executable runs okay when executed via linux command line - runtime error when called via c++ system() command通过linux命令行执行时可执行文件运行正常-通过c ++ system()命令调用时出现运行时错误
【发布时间】:2012-10-24 16:50:21
【问题描述】:

我在 linux 中有一个分水岭模型可执行文件,它在执行时会从多个输入文本文件中读取。当我通过 shell 找到该可执行文件并执行它(没有 root)时,一切正常。但是,我正在编写一个需要调用可执行文件的 c++ 程序,因此我认为我会简单地使用 system()。当我这样做时,模型会执行,但随后会返回与主要输入文本文件之一相关的“文件结尾”运行时错误。我不知道为什么当我通过 shell 手动执行时程序会执行良好,但在通过 system() 命令执行时会返回错误。

我猜没有人会马上知道问题出在哪里,但我不知道从哪里开始我的调查。如有任何建议,我将不胜感激。

谢谢!

我的系统命令是:

system("/home/name/SWAT/olentangy/Scenarios/Default/TxtInOut/swat");

我收到的错误是:

forrtl: severe (24): end-of-file during read, unit 23, file /home/name/EO_G/EIGHT/EIGHT/file.cio
Image              PC        Routine            Line        Source             
swat               0821D03F  Unknown               Unknown  Unknown
swat               0821BD35  Unknown               Unknown  Unknown
swat               081D78D1  Unknown               Unknown  Unknown
swat               081ABD66  Unknown               Unknown  Unknown
swat               081AB621  Unknown               Unknown  Unknown
swat               081BC9DF  Unknown               Unknown  Unknown

【问题讨论】:

  • 请显示您的 system() 调用和您收到的确切错误消息。我们可以从那里开始。
  • 通过system()启动时如何指定要处理的文件?
  • 您在执行程序时可能对工作目录做出了无效的假设。
  • @gcolumbus:这是一个常见问题 - 工作目录和可执行文件的路径不相关 - 如果您通常从特定目录启动可执行文件并且它使用其数据文件的相对路径,那么这个将按预期工作,但是一旦您从另一个工作目录执行它(如您在上面的system 示例中),那么工作目录将会不同,并且相对路径将不起作用。要解决这个问题,您需要使用更强大的机制来指定数据文件的位置 - 通常是绝对路径,可以是硬编码的,也可以是用户指定的。
  • 从你的 Linux 命令行尝试这个测试。首先,键入“cd /home/name/SWAT/olentangy/Scenarios/Default/TxtInOut ; ./swat”。其次,键入“cd / ; /home/name/SWAT/olentangy/Scenarios/Default/TxtInOut/swat”。如果他们的行为不同,那么@PaulR 说的是真的。

标签: c++ linux shell


【解决方案1】:

尽管swat 的行为可以说是有问题的,你仍然可以在你的父程序中解决它:

替换这个:

system("/home/name/SWAT/olentangy/Scenarios/Default/TxtInOut/swat");

用这个:

system("cd /home/name/SWAT/olentangy/Scenarios/Default/TxtInOut && ./swat");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多