ptsname() -- 获得从伪终端名(slave pseudo-terminal)

本文解释了伪终端的概念,并展示了如何使用C语言创建主从伪终端实例,以及如何通过命令行查看当前使用的终端名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

伪终端并不是真正的硬件终端设备,而是一个应用程序。打开一个终端,输入tty 这个命令来查看当前所使用的终端名:

[html]  view plain copy
  1. zhang@zhang-laptop:~$ tty  
  2. /dev/pts/1  

后面的1意味着已经打开了1个终端窗口。实际上,像上面的 /dev/pts/1是从伪终端,它通过文件 /dev/ptmx 建立。/dev/ptmx 可以建立主从伪终端,当打开该文件时,返回的是主伪终端的文件描述符,同时也会在 /dev/pts/ 目录下建立相应的从伪终端文件,如 /dev/pts/1 , /dev/pts/2 等。更多关于主伪终端和从伪终端的信息可使用 man 4 ptmx 进行查阅。

下面这个程序可以打开两个从伪终端:

[html]  view plain copy
  1. #define _XOPEN_SOURCE  
  2. #include <unistd.h>  
  3. #include <fcntl.h>  
  4. #include <stdio.h>  
  5. #include <stdlib.h>  
  6. #include <pty.h>  
  7.   
  8. // pty master  
  9. #define PTMASTER "/dev/ptmx"  
  10.   
  11. int main()  
  12. {  
  13.   
  14.         int amaster, aslave;  
  15.         char *slavename;  
  16.         int masterfd;  
  17.   
  18.         masterfd = openpty(&amaster, &aslave, NULL, NULL, NULL);  
  19.         slavename = ptsname(amaster);  
  20.         printf("pts name : %s\n", slavename);  
  21.   
  22.         masterfd = open(PTMASTER, O_RDWR);  
  23.         if (masterfd < 0) {  
  24.                 perror("open");  
  25.                 exit(EXIT_FAILURE);  
  26.         }  
  27.         slavename = ptsname(masterfd);  
  28.         if (slavename == NULL) {  
  29.                 printf ("Get pts name failed\n");  
  30.                 exit (EXIT_FAILURE);  
  31.         }  
  32.         printf ("pts name : %s\n", slavename);  
  33.         close(masterfd);  
  34.   
  35.         return 0;  
  36. }  

运行输出:

pts name : /dev/pts/2

pts name : /dev/pts/3

 

注意:链接时需要加上 –lutil

没有#define _XOPEN_SOURCE 这个定义,编译程序时会看到类似下面的警告:

[html]  view plain copy
  1. tmp.c: In function ‘main’:  
  2. tmp.c:29: warning: implicit declaration offunction ‘ptsname’  
  3. tmp.c:29: warning: assignment makes pointerfrom integer without a cast  
  4. tmp.c:37: warning: assignment makes pointerfrom integer without a cast  


改写自:http://www.groad.net/bbs/read.php?tid-7315-fpage-2.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值