浅析ptmx代码级open如何运作ptyp,ttyp,pts伪终端(转载)

1.对ptmx执行open操作,将创建1对tty主从设备.
tty_init
=>cdev_init(&ptmx_cdev, &ptmx_fops);
=>然后创建/dev/ptmx节点[luther.gliethttp].
所以/dev/ptmx节点的open函数为ptmx_fops.ptmx_open()
static int ptmx_open(struct inode * inode, struct file * filp)
{
    ...
    idr_ret = idr_get_new(&allocated_ptys, NULL, &index);
    ...
    if (index >= pty_limit) {//NR_UNIX98_PTY_DEFAULT也就是4096个
        ...
    }
    ...
    mutex_lock(&tty_mutex);
    retval = init_dev(ptm_driver, index, &tty);//以index为pts的设备索引号,创建成对的主从设备ptmx和pts
    mutex_unlock(&tty_mutex);
    ...
    retval = ptm_driver->open(tty, filp);
    ...
}
所以fdm = open("/dev/ptmx", O_RDWR);操作之后,将产生一个成对的ptyp和ttyp主从tty设备,并返回ptyp主设备句柄.
2.调用ioctl获得与fdm主设备配对的ttyp设备号.
tty_ioctl
=>tty->driver->ioctl
=>在unix98_pty_init(),仅仅对ptmx主设备赋予了ioctl操作:ptm_driver->ioctl =pty_unix98_ioctl;
=>pty_unix98_ioctl
=>
static int pty_unix98_ioctl(struct tty_struct *tty, struct file *file,
             unsigned int cmd, unsigned long arg)
{
    switch (cmd) {
    case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */
        return pty_set_lock(tty, (int __user *)arg);
    case TIOCGPTN: /* Get PT Number */
        return put_user(tty->index, (unsigned int __user *)arg);//当前tty对应的为ptmx结构,它的index就是与之配对的pts
    }

    return -ENOIOCTLCMD;
}
3.看看glibc库中如何封装ptsname函数,如下为精简版[luther.gliethttp].
char* ptsname( int fd )
{
    unsigned int pty_num;
    static char buff[64];

    if ( ioctl( fd, TIOCGPTN, &pty_num ) != 0 )//最终调用上面的pty_unix98_ioctl获取当前ptmx主设备对应的pty从设备号.
        return NULL;

    snprintf( buff, sizeof(buff), "/dev/pts/%u", pty_num );//格式化为/dev/pts/0,/dev/pts/1等,即:pts对应的文件全路径.
    return buff;
}
4.应用实例
   int fdm fds;
   char *slavename;
   extern char *ptsname();
   
    fdm = open("/dev/ptmx", O_RDWR); /* open master */
    grantpt(fdm); /* change permission of slave */
    unlockpt(fdm); /* unlock slave */
    slavename = ptsname(fdm); /* get name of slave */
    fds = open(slavename, O_RDWR); /* open slave */
    ioctl(fds, I_PUSH, "ptem"); /* push ptem */
    ioctl(fds, I_PUSH, "ldterm"); /* push ldterm */

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可曾遇到以下问题:员工辞职了,把公司的客户资料也拷走了;设计图纸落到了竞争对手手中;市场推广计划被个别员工泄露了……你发现在这个信息安全变得越来越重要的时代,你却对企业局域网内的信息安全束手无策。最痛苦的是,作为行政部或IT部的管理者,老板将一切责任归到你的头上……. 绿盾信息安全管理软件,可以帮您彻底解决以上问题。 软件名称:绿盾信息安全管理软件 版本信息:V1.10 大小:11.75MB 支持语言:中文版本/英文版本 适用系统:Windows 2000/XP/2003 开发商:厦门天锐科技有限公司 官方下载:www.ldsafe.com 功能简介: 一、文件加密模块 通过绿盾信息安全管理软件,系统在不改变用户原有工作流程和文件使用习惯的前提下,对需要保护的文件进行强制加密保护,并对文件的使用进行全程监控,即文件只能在企业局域网内部查看,离开局域网则为密文,这样有效防止了被动和主动泄密,消除内部安全隐患于无形之中。 1、系统方案:在服务器上(其他客户机可以和它通信的电脑)安装绿盾服务端,然后在文件服务器和需要使用共享文件的电脑上安装绿盾终端。在绿盾服务端上创建若干终端帐户,绿盾终端使用这些帐户登入。只有安装了绿盾终端的电脑在登入帐户后才可以使用或查看加密的文件,离开局域网后需要使用或查看加密文件需要得到服务端的解密或者授权才可。安装绿盾终端用户的文件在创建、存储、应用、传输等环节中均以加密形式存在,可以杜绝黑客工具的窃取和监听。 2、文件外发方案:如有内部文件需要外发,可把这些文件发送到只解密不加密的绿盾终端(通过设置登入终端的帐户类型实现),通过这些终端电脑将这些文件另存,另存后的文件即以明文的形式存在并可根据实际需要发送给企业外部客户。 3、离线方案:如企业内部员工需要带笔记本电脑脱离局域网(出差或在家查看加密文档),可以使用绿盾的离线策略。离线策略需要向管理员申请,获得批准后导入即可。且离线策略可以灵活设定离线使用天数,这样在方便员工外部办公的同时也有效地保证了文档的安全。 二、内网安全管理模块 1、实时操作日志 :实时详细地记录所有终端的操作日志。包括终端上窗口标题的变换、程序的启动关闭、浏览的网址、收发的邮件标题、创建删除文件等; 2、屏幕快照、屏幕追踪、屏幕回放  3、应用程序使用记录、使用限制、使用统计: 详细记录各个应用程序的开启关闭的时间,运行时间,活动时间等信息; 提供应用程序白名单和黑名单功能,方便地限制员工可以运行哪些程序,不能运行哪些程序; 4、文件及目录操作记录:详细记录文件创建、重命名、删除的情况;详细记录文件夹(目录)创建、重命名、删除等情况。 5、打印机操作记录:记录员工的打印机使用情况,包括打印的文档名、页数、打印时间等。 6、硬件使用限制: 限制使用USB设备、USB存储设备、光驱、软驱的使用。支持移动磁盘、光盘刻录文件操作的监视; 7、软硬件清单、变化记:远程列出员工计算机的软件和硬件清单及配置变化的记录; 8、YAHOO通/贸易通/新浪UC/ICQ/AOL/E话通/SKYPE/MSN专业版/TM/QQ等聊天内容记录监视 9、报警功能 10、Arp防火墙功能: 可进行IP、MAC 绑定,防止ARP攻击 。 11、远程控制功能: 重启、关闭计算机;注销WINDOWS;发送信息 。 12、资产管理功能 由于软件大于10MB,无法全部上传,只能上传一部分,请大家见谅。如果要下载的话,请到官方网站www.ldsafe.com下载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值