ptsname() -- 获得从伪终端名(slave pseudo-terminal)
来源:互联网 发布:不是c语言关键字 编辑:程序博客网 时间:2024/06/11 09:55
伪终端并不是真正的硬件终端设备,而是一个应用程序。打开一个终端,输入tty 这个命令来查看当前所使用的终端名:
- zhang@zhang-laptop:~$ tty
- /dev/pts/1
后面的1意味着已经打开了1个终端窗口。实际上,像上面的 /dev/pts/1是从伪终端,它通过文件 /dev/ptmx 建立。/dev/ptmx 可以建立主从伪终端,当打开该文件时,返回的是主伪终端的文件描述符,同时也会在 /dev/pts/ 目录下建立相应的从伪终端文件,如 /dev/pts/1 , /dev/pts/2 等。更多关于主伪终端和从伪终端的信息可使用 man 4 ptmx 进行查阅。
下面这个程序可以打开两个从伪终端:
- #define _XOPEN_SOURCE
- #include <unistd.h>
- #include <fcntl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <pty.h>
- // pty master
- #define PTMASTER "/dev/ptmx"
- int main()
- {
- int amaster, aslave;
- char *slavename;
- int masterfd;
- masterfd = openpty(&amaster, &aslave, NULL, NULL, NULL);
- slavename = ptsname(amaster);
- printf("pts name : %s\n", slavename);
- masterfd = open(PTMASTER, O_RDWR);
- if (masterfd < 0) {
- perror("open");
- exit(EXIT_FAILURE);
- }
- slavename = ptsname(masterfd);
- if (slavename == NULL) {
- printf ("Get pts name failed\n");
- exit (EXIT_FAILURE);
- }
- printf ("pts name : %s\n", slavename);
- close(masterfd);
- return 0;
- }
运行输出:
pts name : /dev/pts/2
pts name : /dev/pts/3
注意:链接时需要加上 –lutil
没有#define _XOPEN_SOURCE 这个定义,编译程序时会看到类似下面的警告:
- tmp.c: In function ‘main’:
- tmp.c:29: warning: implicit declaration offunction ‘ptsname’
- tmp.c:29: warning: assignment makes pointerfrom integer without a cast
- tmp.c:37: warning: assignment makes pointerfrom integer without a cast
改写自:http://www.groad.net/bbs/read.php?tid-7315-fpage-2.html
0 0
- ptsname() -- 获得从伪终端名(slave pseudo-terminal)
- ptsname() -- 获得从伪终端名(slave pseudo-terminal)
- 伪随机 pseudo-Random
- Pseudo-column 伪列
- Ubuntu12.04从桌面进入终端Terminal的方式
- CSS 伪类 (Pseudo-classes)
- CSS 伪元素 (Pseudo-elements)
- CSS 伪类 (Pseudo-classes)
- CSS 伪元素 (Pseudo-elements)
- 设置终端(terminal)快捷键
- Centos terminal终端快捷键
- Terminal终端的快捷键
- Linux 终端 terminal
- 终端terminal个性化配置
- Mac Terminal 终端 快捷键
- 伪终端
- 如何从进程名获得进程ID
- 终端 伪终端 控制终端
- 读博客”求一个整数中二进制数1的个数“两种方法分析
- lnmp一键安装包(最后开启80防火墙)
- 在OpenErp的配置文件中, 为数据库密码加密
- VSFTP在LINUX中的安装、配置
- 简单的DOS命令
- ptsname() -- 获得从伪终端名(slave pseudo-terminal)
- VC-RAS拨号源码详解(2009-11-17 08:25:24)转载▼标签: ifidc错误代码it
- 防止因意外掉线断网引起的ssh终端程序异常20140110
- 关于import com.sun.image.codec.jpeg.JPEGCodec时报错
- 图像超分辨率重建简介
- [BZOJ]2127happiness 最大权闭合图再谈
- 【复杂网络系列】gephi绘图
- C# 网络相关类汇总
- 好压打开压缩包文件名乱码问题一步教你解决