前段时间实现一个类似PAC的工具,为了实现相关功能需要在代码中实现申请pty。
相信很多人虽然知道pty是什么东西,却从未亲手写过相关代码申请pty。我粘贴自己实现的部分代码并简单注释,希望能对有需要的同学们提供一些帮助。
#define _XOPEN_SOURCE // 记得定义此测试宏,否则grantpy等函数不可用
#include <stdlib.h>
// Your Code Here
// 获得pty的master端fd(至于什么pty的master和slave这里不多说了,大家可以去搜搜!)
int master = getpt();
if (master < 0) {
return NULL;
}
// 设置flags,这个是我的程序中需要用到的,根据自己的需要设置其flags
int flags = fcntl(master, F_GETFL, 0);
if (flags < 0) {
return NULL;
}
flags &= ~O_NONBLOCK; // blocking it
flags |= FD_CLOEXEC; // close on exec
if (fcntl(master, F_SETFL, flags) < 0) {
return NULL;
}
// 获得此master对应的slave设备名
char *slave = ptsname(master);
// grant and unlock slave
// 赋予slave设备访问权限,并解锁master设备,只有这样做了才能对slave正常操作。
if (grantpt(master) != 0 || unlockpt(master) != 0){
return NULL;
}
// Your Code Here