我正在尝试编写一个基本shell程序,该程序在EOF中退出并处理SIGINT而不退出。它在一个无功能的c文件中工作,但是在创建函数时,我碰到一个错误,EOF和SIGNINT会导致seg错误。我不确定是什么导致了这种情况,并希望有人会发现我没有的东西。下面是我认为导致这个问题的函数,它是在Shell读取命令(或者我正在应用信号的地方)之后完成的第一件事。C:收到信号时出现分段错误
int check_redirect(char *line, int flag)
{
int n = 0;
if (line == NULL) return (flag);
else
{
do
{
if (line[n] == '>') flag = 1;
n++;
}while (line[n] != '\n');
}
return (flag);
}
这就是函数被调用:
char buffer[15];
time_t now = time(NULL);
strftime(buffer, 15, "[%d/%m %H:%M]", localtime(&now));
fprintf(stdout, "%s # ", buffer);
signal(SIGINT, SIG_IGN);
read = getline (&line, &len, stdin);
signal(SIGINT, SIG_DFL);
flag = check_redirect(line, flag);
但愿这是非常明显的。这是在一个循环的开始,它正在寻找输入作为命令执行,并打印出提示(日期和时间#)。这些命令主要起作用,但是它们偶尔会丢失,我认为这可能与此信号处理错误有关。
在此先感谢。
... }while (line[n] != '\n');
建议检查的不仅仅是\n
性格比较:
如果发生什么'line'没有一个换行符? – FredK
@FredK该行不会被提交,除了EOF字符的情况。如果有\ n这行是通过检查来检查它是否是重定向或cd命令,否则将使用strtok进行拆分并在执行系统调用中使用 – BitFlow
创建“行”的位置/方式? – ryyker