0
我做:如何使用Ctrl + D退出,如使用execl bash?
execl("/bin/bash", "/bin/bash", NULL);
當我做一個按Ctrl + d,它直接退出。如何在退出前像bash一樣寫exit
?
我需要添加一個標誌或其他東西到execl
?
我做:如何使用Ctrl + D退出,如使用execl bash?
execl("/bin/bash", "/bin/bash", NULL);
當我做一個按Ctrl + d,它直接退出。如何在退出前像bash一樣寫exit
?
我需要添加一個標誌或其他東西到execl
?
當我編譯execl(...)
,它打印出的按Ctrl-d就好
#include <unistd.h>
int main(int argc, char **argv)
{
execl("/bin/bash", "/bin/bash", 0);
return 0;
}
也許,你做一個fork()
或從終端分離或做別的事情,這讓慶典假設它是不-互動。
Ctrl-D通常由終端解釋。如果您想自己執行此操作,則必須在termios
結構中重置VEOF
,詳情請參閱c_cc
。
這是一個簡單的例子,您可以自己處理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;
}
這個程序讀取來自終端的線,直到它接收到開始Ctrl-D
線。
更多示例請參閱Serial Programming HOWTO。
的確,我正在做一個分叉。並使用短語來撤銷ECHO。我想以某種方式捕捉Ctrl + D。我在兒子身上做了一個'exelc',我在父親那裏讀了它。我怎樣才能以這種方式捕捉Ctrl + D? – Elfayer 2013-03-03 21:38:54
@Elfayer請參閱最新的答案。 – 2013-03-03 22:04:39
我已經試過類似於't.c_cc [VEOF] =「exit」;',但它需要一個字符。 – Elfayer 2013-03-03 22:16:23