⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gettty.c

📁 rxvt经典的linux下的终端.小巧实用
💻 C
字号:
#include "../../config.h"#include <stdio.h>#ifdef HAVE_STDLIB_H# include <stdlib.h>#endif#ifdef HAVE_SYS_TYPES_H# include <sys/types.h>#endif#ifdef HAVE_UNISTD_H# include <unistd.h>#endif#include <sys/wait.h>int verb = 1;intmain(int argc){    int             i, pid;    int             fd_pty, fd_tty;    const char     *ttydev;    if (argc != 1)	verb = 0;    fd_pty = fd_tty = -1;    ttydev = NULL;    fd_pty = rxvt_get_pty(&fd_tty, &ttydev);    if (fd_pty < 0) {	fprintf(stderr, "rxvt_get_pty() failed\n");	exit(1);    }    if (verb)	fprintf(stderr, "rxvt_get_pty() OK.  Found %s (opened pty fd: %d)\n", ttydev, fd_pty);    if (fd_tty < 0) {# ifdef HAVE_REVOKE	revoke(ttydev);# endif	if ((fd_tty = rxvt_get_tty(ttydev)) < 0) {	    fprintf(stderr, "rxvt_get_tty() failed on %s", ttydev);	    exit(1);	}	if (verb)	    fprintf(stderr, "rxvt_get_tty() OK.  (opened tty fd: %d)\n", fd_tty);    } else if (verb)	fprintf(stderr, "Didn't call: rxvt_get_tty() (already have fd)\n");    for (i = 0; i < 255; i++)	if (i != fd_pty && i != 2 && i != fd_tty)	    close(i);    pid = fork();    if (pid) {	int             exitst = 1;	int             j = 0;	close(fd_tty);	for ( ; ++j < 5; ) {	    if (waitpid(-1, &i, WNOHANG) != 0)		break;	    sleep(1);	}	if (j == 5)	    kill(pid, 2);	if (WIFEXITED(i)) {	    exitst = WEXITSTATUS(i);	    if (exitst == 0)	        fprintf(stderr, "OK\n");	    else	        fprintf(stderr, "Failed.  Child exit status: %d\n", WEXITSTATUS(i));	} else	    fprintf(stderr, "Interrupted\n");	exit(exitst);    }    close(fd_pty);    if (verb)	fprintf(stderr, "Calling: rxvt_control_tty\n");    i = rxvt_control_tty(fd_tty, ttydev);    if (i < 0) {	fprintf(stderr, "could not obtain control of tty\n");	exit(1);    }    exit(0);    /* NOTREACHED */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -