【问题标题】:C fopen isn't working, when I run program with bash当我用 bash 运行程序时,C fopen 不起作用
【发布时间】:2017-11-22 00:16:31
【问题描述】:

我有简单的 bash 脚本

#!/bin/bash

make
./code1_test/test_syn1
./code2_test/test_syn2
./code3_test/test_syn3

test_syn 是我的程序测试。在每个程序中,我都使用 fopen 命令打开 .txt 文件。如果我从命令行运行程序,我有一个正确的测试输出,但是当我使用这个 bash 脚本时,fopen 返回我 NULL,所以我无法打开我的 .txt 文件,也无法运行测试。为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 你能创建一个最小的 test_syn 文件来重现这个吗?
  • 可能是路径问题。也好把test_syn的代码贴出来。
  • 您可能在程序中使用了相对路径,因此当您运行脚本时,程序会在运行脚本的目录中查找。
  • 每当我看到类似“ 的 is not working”之类的问题时,我可以保证两件事:发帖者是初学者, 正在工作正好。做一些基本的调试:打印出调用的返回值和 errno 值,尝试查找正在打开的文件的完整路径名等。这几乎可以肯定是当前目录/路径的问题。

标签: c bash shell fopen


【解决方案1】:

如果您使用带有相对路径的fopen(),您应该从其目录执行脚本。试试这个:

#!/bin/bash
make
(cd code1_test/ && exec ./test_syn1)
(cd code2_test/ && exec ./test_syn2)
(cd code3_test/ && exec ./test_syn3)

否则,您的程序会尝试在您运行 Bash 脚本的目录中打开您的 .txt,这不是您想要的。

如果您希望能够从任何地方运行您的程序,您可以尝试在fopen() 时不要使用相对路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多