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

📄 fig19.10

📁 UNIX环境高级编程书的源代码
💻 10
字号:
#include "apue.h"#include <fcntl.h>#ifndef _HAS_OPENPTintposix_openpt(int oflag){	int		fdm;	fdm = open("/dev/ptmx", oflag);	return(fdm);}#endif#ifndef _HAS_PTSNAMEchar *ptsname(int fdm){	int			sminor;	static char	pts_name[16];	if (ioctl(fdm, TIOCGPTN, &sminor) < 0)		return(NULL);	snprintf(pts_name, sizeof(pts_name), "/dev/pts/%d", sminor);	return(pts_name);}#endif#ifndef _HAS_GRANTPTintgrantpt(int fdm){	char			*pts_name;	pts_name = ptsname(fdm);	return(chmod(pts_name, S_IRUSR | S_IWUSR | S_IWGRP));}#endif#ifndef _HAS_UNLOCKPTintunlockpt(int fdm){	int lock = 0;	return(ioctl(fdm, TIOCSPTLCK, &lock));}#endifintptym_open(char *pts_name, int pts_namesz){	char	*ptr;	int		fdm;	/*	 * Return the name of the master device so that on failure	 * the caller can print an error message.  Null terminate	 * to handle case where string length > pts_namesz.	 */	strncpy(pts_name, "/dev/ptmx", pts_namesz);	pts_name[pts_namesz - 1] = '\0';	fdm = posix_openpt(O_RDWR);	if (fdm < 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);	}	/*	 * Return name of slave.  Null terminate to handle case	 * where strlen(ptr) > pts_namesz.	 */	strncpy(pts_name, ptr, pts_namesz);	pts_name[pts_namesz - 1] = '\0';	return(fdm);			/* return fd of master */}intptys_open(char *pts_name){	int fds;	if ((fds = open(pts_name, O_RDWR)) < 0)		return(-5);	return(fds);}

⌨️ 快捷键说明

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