C - 替换 "No such file or directory" 消息
C - Replace "No such file or directory" message
我正在尝试制作一个 shell,当它无法执行命令时,它会显示 "Error executing binary: -nameOfBinary-"。但问题是它总是给我消息 "No such file or directory"。
这是我的部分代码:
void handle_SIGINT() {
write(STDOUT_FILENO,line,strlen(line));
printf("\n");
struct sigaction handler;
handler.sa_handler = handle_SIGINT;
sigaction(SIGINT, &handler, NULL);
}
void runcommand(char* argv[]) {
int p =fork();
if(p==0) {
struct sigaction handler;
handler.sa_handler = SIG_IGN;
sigaction(SIGINT, &handler, NULL);
execvp(argv[0],argv);
perror("Error executing binary");
exit(1);
} else {
wait(NULL);
}
}
使用代码,它总是给我消息 "Error executing binary: No such file or directory",这接近我想要的!
我该如何解决?
提前致谢!
函数perror()
打印你提供的字符串,一个冒号和一个space,然后加上errno
当前值对应的字符串(ENOENT
或 'No such file or directory' 在你的情况下)和换行符。如果那不是您想要的消息,您必须编写并调用您自己的错误报告函数。
你可以作弊并简单地使用:
perror(argv[0]);
这会给你这样的东西:
name-of-binary: No such file or directory
或者您可以自己编写:
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void err_syserr(const char *fmt, ...)
{
int errnum = errno;
va_list args;
va_start(args, fmt);
vfprintf(stderr, fmt, args);
if (errnum != 0)
fprintf(stderr, "%d: %s\n", errnum, strerror(errnum));
putc('\n', stderr);
exit(EXIT_FAILURE);
}
然后调用它:
err_syserr("Error executing binary: %s: ", argv[0]);
因为函数调用了exit()
,所以可以用_Noreturn
修饰,表示它没有return,你不需要exit(1);
调用代码。
有些人认为打印错误编号和消息是一件坏事™,但(如您所猜)我不同意我所做的大部分工作。这在面向网络的代码中可能很重要,但这不太可能是面向网络的代码。
我正在尝试制作一个 shell,当它无法执行命令时,它会显示 "Error executing binary: -nameOfBinary-"。但问题是它总是给我消息 "No such file or directory"。 这是我的部分代码:
void handle_SIGINT() {
write(STDOUT_FILENO,line,strlen(line));
printf("\n");
struct sigaction handler;
handler.sa_handler = handle_SIGINT;
sigaction(SIGINT, &handler, NULL);
}
void runcommand(char* argv[]) {
int p =fork();
if(p==0) {
struct sigaction handler;
handler.sa_handler = SIG_IGN;
sigaction(SIGINT, &handler, NULL);
execvp(argv[0],argv);
perror("Error executing binary");
exit(1);
} else {
wait(NULL);
}
}
使用代码,它总是给我消息 "Error executing binary: No such file or directory",这接近我想要的! 我该如何解决? 提前致谢!
函数perror()
打印你提供的字符串,一个冒号和一个space,然后加上errno
当前值对应的字符串(ENOENT
或 'No such file or directory' 在你的情况下)和换行符。如果那不是您想要的消息,您必须编写并调用您自己的错误报告函数。
你可以作弊并简单地使用:
perror(argv[0]);
这会给你这样的东西:
name-of-binary: No such file or directory
或者您可以自己编写:
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void err_syserr(const char *fmt, ...)
{
int errnum = errno;
va_list args;
va_start(args, fmt);
vfprintf(stderr, fmt, args);
if (errnum != 0)
fprintf(stderr, "%d: %s\n", errnum, strerror(errnum));
putc('\n', stderr);
exit(EXIT_FAILURE);
}
然后调用它:
err_syserr("Error executing binary: %s: ", argv[0]);
因为函数调用了exit()
,所以可以用_Noreturn
修饰,表示它没有return,你不需要exit(1);
调用代码。
有些人认为打印错误编号和消息是一件坏事™,但(如您所猜)我不同意我所做的大部分工作。这在面向网络的代码中可能很重要,但这不太可能是面向网络的代码。