execvp 可执行 运行 引起的输出运行时错误
Output Runtime error caused by executable run by execvp
我正在尝试使用 execvp
执行可执行的 c 程序。正常情况下,例如使用 scanf
获取输入并使用 printf
显示输出在终端中工作正常。
但是运行时错误不会像 Segmentation fault (core dumped)
那样显示在终端中。
这是我的代码:
int main(int argc, char const *argv[]) {
int fd=open("/dev/ptmx",O_RDWR);
char *name=ptsname(fd);
grantpt(fd);
unlockpt(fd);
int pid=fork();
if(pid==0){
fd=open(name,O_RDWR);//opening pts
if(fd<0){
printf("fd error2\n");
return -1;
}
char *cmd="./e"; //e is executable with runtime error
char *argv[2]={cmd,0};
if(execvp(cmd,argv)<0)
printf("execvp errorrr\n");
}
else{
while(wait(0)!=pid);
printf("Program exited\n");
}
return 0;
}
我尝试使用 dup2
设置标准错误。没用。
使用 wait()
的状态参数获取程序退出的原因。
int status;
while (wait(&status) != pid) {}
if (WIFSIGNALED(status)) {
printf("%s", strsignal(WTERMSIG(status)));
if (WCOREDUMP(status)) {
printf(" (core dumped)\n");
} else {
printf("\n");
}
}
我正在尝试使用 execvp
执行可执行的 c 程序。正常情况下,例如使用 scanf
获取输入并使用 printf
显示输出在终端中工作正常。
但是运行时错误不会像 Segmentation fault (core dumped)
那样显示在终端中。
这是我的代码:
int main(int argc, char const *argv[]) {
int fd=open("/dev/ptmx",O_RDWR);
char *name=ptsname(fd);
grantpt(fd);
unlockpt(fd);
int pid=fork();
if(pid==0){
fd=open(name,O_RDWR);//opening pts
if(fd<0){
printf("fd error2\n");
return -1;
}
char *cmd="./e"; //e is executable with runtime error
char *argv[2]={cmd,0};
if(execvp(cmd,argv)<0)
printf("execvp errorrr\n");
}
else{
while(wait(0)!=pid);
printf("Program exited\n");
}
return 0;
}
我尝试使用 dup2
设置标准错误。没用。
使用 wait()
的状态参数获取程序退出的原因。
int status;
while (wait(&status) != pid) {}
if (WIFSIGNALED(status)) {
printf("%s", strsignal(WTERMSIG(status)));
if (WCOREDUMP(status)) {
printf(" (core dumped)\n");
} else {
printf("\n");
}
}