当我调用 execvp 到 运行 java 时发生错误
error occur when I call execvp to run java
我用chdir()
切换目录,然后用execvp()
执行“javaMain”。我确定有 Main.class,但出了点问题。我想知道为什么。
#include <cstdio>
#include <unistd.h>
using namespace std;
int main(){
char buf[80];
getcwd(buf,sizeof(buf));
printf("current working directory: %s\n", buf);
chdir("/home/keane/Judge/temp");
getcwd(buf,sizeof(buf));
printf("current working directory: %s\n", buf);
char *array[3];
array[0] = "java";
array[1] = "Main";
array[2] = NULL;
execvp("java", array);
return 0;
}
错误是 could not find the main class
,我可以 运行 java Main
在那个目录中。
气死我的是我不能用system("java Main")
,错误是Error: Could not find or load main class Main
,我电脑上就是这样
更新:
#include <unistd.h>
#include <cstdlib>
int main(){
chdir("/home/keane/Judge/temp");
system("pwd");
system("ls");
system("java Main");
return 0;
}
控制台上的输出是:
/home/keane/Judge/temp
1.out 3.out 5.out Main.class stdout_spj.txt
2.out 4.out ce.txt Main.java
Error: Could not find or load the main class Main
我最后的解决办法是重启电脑,然后在java命令中加入-cp .
。
虽然我不知道为什么是必要的。
谢谢大家!
我认为您不能 运行 .class 文件。你应该寻找.jar。那基本上就是'java-executable'。它通常应该在您编译 java 项目时出现。
这在我的系统上按预期工作,也许您需要将 -cp .
添加到 java 调用中。
编辑:详细说明:-cp
(对于类路径)告诉java在哪里寻找用户提供的.class
文件。默认情况下,这不一定包括当前工作目录。
execvp() 的执行是 non-blocking 并取得调用者的所有权,这意味着当它开始时如果程序结束得太快,你将永远看不到结果,为了解决这个问题,我使用 fork()。等待只是为了避免像我一开始那样使用睡眠。全部在 c.
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/wait.h>
int main(int argc, char** argv){
char buf[80];
getcwd(buf,sizeof(buf));
printf("current working directory: %s\n", buf);
chdir("/home/");
getcwd(buf,sizeof(buf));
printf("current working directory: %s\n", buf);
char *array[3] = {"java", "Main", NULL};
if(fork() == 0) {
if(execvp("java", array) < 0) {
fprintf(stderr, "Error spawning command: %s\n", strerror(errno));
}
} else {
printf("Command spawned\n");
wait(NULL); // Wait to the forked process to end (avoid using sleep)
}
return 0;
}
我用chdir()
切换目录,然后用execvp()
执行“javaMain”。我确定有 Main.class,但出了点问题。我想知道为什么。
#include <cstdio>
#include <unistd.h>
using namespace std;
int main(){
char buf[80];
getcwd(buf,sizeof(buf));
printf("current working directory: %s\n", buf);
chdir("/home/keane/Judge/temp");
getcwd(buf,sizeof(buf));
printf("current working directory: %s\n", buf);
char *array[3];
array[0] = "java";
array[1] = "Main";
array[2] = NULL;
execvp("java", array);
return 0;
}
错误是 could not find the main class
,我可以 运行 java Main
在那个目录中。
气死我的是我不能用system("java Main")
,错误是Error: Could not find or load main class Main
,我电脑上就是这样
更新:
#include <unistd.h>
#include <cstdlib>
int main(){
chdir("/home/keane/Judge/temp");
system("pwd");
system("ls");
system("java Main");
return 0;
}
控制台上的输出是:
/home/keane/Judge/temp
1.out 3.out 5.out Main.class stdout_spj.txt
2.out 4.out ce.txt Main.java
Error: Could not find or load the main class Main
我最后的解决办法是重启电脑,然后在java命令中加入-cp .
。
虽然我不知道为什么是必要的。
谢谢大家!
我认为您不能 运行 .class 文件。你应该寻找.jar。那基本上就是'java-executable'。它通常应该在您编译 java 项目时出现。
这在我的系统上按预期工作,也许您需要将 -cp .
添加到 java 调用中。
编辑:详细说明:-cp
(对于类路径)告诉java在哪里寻找用户提供的.class
文件。默认情况下,这不一定包括当前工作目录。
execvp() 的执行是 non-blocking 并取得调用者的所有权,这意味着当它开始时如果程序结束得太快,你将永远看不到结果,为了解决这个问题,我使用 fork()。等待只是为了避免像我一开始那样使用睡眠。全部在 c.
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/wait.h>
int main(int argc, char** argv){
char buf[80];
getcwd(buf,sizeof(buf));
printf("current working directory: %s\n", buf);
chdir("/home/");
getcwd(buf,sizeof(buf));
printf("current working directory: %s\n", buf);
char *array[3] = {"java", "Main", NULL};
if(fork() == 0) {
if(execvp("java", array) < 0) {
fprintf(stderr, "Error spawning command: %s\n", strerror(errno));
}
} else {
printf("Command spawned\n");
wait(NULL); // Wait to the forked process to end (avoid using sleep)
}
return 0;
}