如何使用Ctrl+退出;我想和execl一起狂欢?

如何使用Ctrl+退出;我想和execl一起狂欢?,c,linux,bash,exec,C,Linux,Bash,Exec,我正在做: execl(“/bin/bash”,“/bin/bash”,NULL) 当我按Ctrl+D组合键时,它会直接退出。如何在退出之前执行与bash相同的操作并编写exit 我是否必须向execl添加标志或其他内容?当我编译execl(…)时,它会在Ctrl-D上打印exit #include <unistd.h> int main(int argc, char **argv) { execl("/bin/bash", "/bin/bash", 0); ret

我正在做:

execl(“/bin/bash”,“/bin/bash”,NULL)

当我按Ctrl+D组合键时,它会直接退出。如何在退出之前执行与bash相同的操作并编写
exit

我是否必须向
execl
添加标志或其他内容?

当我编译
execl(…)
时,它会在Ctrl-D上打印exit

#include <unistd.h>

int main(int argc, char **argv)
{
    execl("/bin/bash", "/bin/bash", 0);
    return 0;
}
此程序从终端读取一行,直到收到以
Ctrl-D
开头的一行


有关更多示例,请参见。

事实上,我正在使用叉子。和termcaps来撤销回声。我想以某种方式捕捉Ctrl+d。我在儿子身上做了一个
exelc
,我在父亲身上读到了它。我怎么能用这种方式捕捉Ctrl+D呢?我已经尝试过这样的方法:
t.c_cc[VEOF]=“退出”
,但它需要一个字符。@ellayer您必须首先阻止终端解释
Ctrl-D
。然后从终端读取并在接收时执行操作
Ctrl-D
。谢谢,我发现了以下内容:
#include <sys/wait.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    char buf[100];
    int fd;
    struct termios tio;
    fd = open("/dev/tty", O_RDWR);
    if (fd < 0) {
        perror("open tty");
        exit(1);
    }

    memset(&tio, 0, sizeof(tio));
    tcgetattr(fd, &tio);
    tio.c_cc[VEOF] = 0;
    tcflush(fd, TCIFLUSH);
    tcsetattr(fd, TCSANOW, &tio);

    while (fgets(buf, sizeof(buf), stdin)) {
        if (buf[0] == 4) {
            printf("Got Ctrl-D\n");
            break;
        }
    }

    return 0;
}