ptyopen.c

来自「APUE(第二版)的随书源代码,与第一版的代码相比增加了一些章节的代码(详见第二」· C语言 代码 · 共 64 行

C
64
字号
#include	<sys/types.h>#include	<sys/stat.h>#include	<errno.h>#include	<fcntl.h>#include	<stropts.h>#include	"ourhdr.h"extern char	*ptsname(int);	/* prototype not in any system header */intptym_open(char *pts_name){	char	*ptr;	int		fdm;	strcpy(pts_name, "/dev/ptmx");	/* in case open fails */	if ( (fdm = open(pts_name, O_RDWR)) < 0)		return(-1);	if (grantpt(fdm) < 0) {		/* grant access to slave */		close(fdm);		return(-2);	}	if (unlockpt(fdm) < 0) {	/* clear slave's lock flag */		close(fdm);		return(-3);	}	if ( (ptr = ptsname(fdm)) == NULL) {	/* get slave's name */		close(fdm);		return(-4);	}	strcpy(pts_name, ptr);	/* return name of slave */	return(fdm);			/* return fd of master */}intptys_open(int fdm, char *pts_name){	int		fds;			/* following should allocate controlling terminal */	if ( (fds = open(pts_name, O_RDWR)) < 0) {		close(fdm);		return(-5);	}	if (ioctl(fds, I_PUSH, "ptem") < 0) {		close(fdm);		close(fds);		return(-6);	}	if (ioctl(fds, I_PUSH, "ldterm") < 0) {		close(fdm);		close(fds);		return(-7);	}	if (ioctl(fds, I_PUSH, "ttcompat") < 0) {		close(fdm);		close(fds);		return(-8);	}	return(fds);}

⌨️ 快捷键说明

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