程序接收到的信号sigtstp已停止(用户)

可能重复:
什么是C编程语言中的EOF?

当我学习K&R C编程语言时,我试图编写一个从控制台读取一些行然后输出所有input的程序。 我需要使用ctrl-z(EOF)来终止我的inputstream。 但问题是当我敲ctrl-z,程序停止,所有的input不能输出到控制台(gdb说:“编程接收到的信号SIGTSTP,停止(用户)在__kernel_vsyscall()”)0X00132416)。 我试图用kill函数来处理这个终止信号,但是失败了。 我可以做什么使控制台输出所有的input线。 我的部分代码如下:

#include<stdio.h> #include<string.h> #define MAXLINES 5000 /* possibly max amount of lines */ char *lineptr[MAXLINES]; /* pointers to lines read */ int readlines(char *lineptr[], int nlines); void writelines(char *lineptr[], int nlines); main(int argc, char *argv[]) { int nlines; /* number of lines read */ **if ((nlines = readlines(lineptr, MAXLINES)) >= 0)** {//program finished when I tap ctrl-z writelines(lineptr, nlines); // from this line can't be run return 0; } else { printf("input too big to sort\n"); return 1; } } #define MAXLEN 1000 int get_line(char *, int); char *alloc(int); /* readlines : read the input */ int readlines(char *lineptr[], int maxlines) { int len, nlines; char *p, line[MAXLEN]; nlines = 0; while ((len = get_line(line, MAXLEN)) > 0) if (nlines >= maxlines || (p = alloc(len)) == NULL) return -1; else { line[len - 1] = '\0'; strcpy(p, line); lineptr[nlines++] = p; } return nlines; } /* writelines : output the readlines */ void writelines(char *lineptr[], int nlines) { int i; for (i = 0; i < nlines; i++) printf("%s\n", lineptr[i]); } 

Ctrl + Z在大多数Linux终端上发送挂起信号。 在Linux上,EOF通常是Ctrl + D。

在Windows上Ctrl + Z是EOF。

如果你正在linux / unix平台上工作,ctrl-z暂停程序,程序收到SIGSTOP而不是EOF。 EOF通常是ctrl-D。 运行stty -a命令来设置/更改终端线路设置。 如果您必须使用ctrl-z更改stty设置。

希望这可以帮助。

因为在Linux上,Ctrl + D是EOF标记,而不是Ctrl + Z,它会向进程发送SIGSTP。

所以当你真正想要输入EOF字符的时候,你基本上是要求你的进程停止每次你按Ctrl + Z。