【问题标题】:Cygwin C File returns "Bad Address" when using execv使用 execv 时,Cygwin C 文件返回“错误地址”
【发布时间】:2012-06-10 13:36:51
【问题描述】:

我写了一个小java程序,我想在windows启动时执行它。我写了一个批处理文件在操作系统启动时运行,但我意识到它不会工作,因为 Windows 7 在操作系统启动时停止运行任何批处理文件。

为了解决这个问题,我想编写一个 c 程序,用 cygwin 编译它(以便它的 .exe),并在操作系统启动时运行它。我希望它执行命令:

java -jar ipsetup.jar

我无法让它工作,所以我尝试让 c 程序执行“ls”命令。代码如下:

int main(int argc, char ** argv){

//argv[0] = "java";
//argv[1] = "-jar";
//argv[2] = "c:/windows/ipstartup.jar";

execv("/bin/ls", "/bin/ls");
printf("%s",strerror(errno));
return 1;

}

我不断收到错误“地址错误”或“文件或目录不存在”。有谁知道为什么?

谢谢

**编辑

所以我可以让程序在 cygwin 中正确运行(它执行我的 java 文件)。但是当我在 Windows 中运行它时,它只输出打印语句。原来是说缺少cygwin1.dll,所以我把它放到了windows目录下。这是我的源代码:

#include <errno.h>
#include <stdio.h>

int main(int argc, char ** argv){

//argv[0] = "java";
//argv[1] = "-jar";
//argv[2] = "c:/windows/ipstartup.jar";


system("java -jar c:/windows/ipstartup.jar");
printf("I am here");
return 1;

}

【问题讨论】:

    标签: java c exec


    【解决方案1】:

    我可以在这里看到两个潜在的错误来源,它们类似于批处理文件问题:cygwin 和/或 java 在 Windows 启动时可能无法工作。

    你为什么要把它做成一个 cygwin 程序?使用 system() 函数和常规 ANSI C 有什么问题吗?

    【讨论】:

    • 我没有尝试 system()。让我现在试试。
    • system() 运行良好。泰。您知道为什么常规 exec 不起作用吗?
    • 对于初学者,您调用了错误的 exec 变体。 execv 期望第二个参数是要传递给程序的 char* 参数数组。按照你的称呼,你应该使用execl
    • 使用system("java -jar ipstartup.jar")时,我在windows中运行程序时,好像没有执行这个语句。知道为什么吗?
    • 您的PATH 上的java 可执行文件吗? (即,当您在 Windows 命令提示符下键入 java 时会发生什么?)这个启动脚本在用户帐户的路径上运行怎么样?
    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 2023-03-03
    • 2012-03-02
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多