添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

-----------------------------------------------------------

本文系本站原创

,

欢迎转载

!

转载请注明出处

:http://sjj0412.cublog.cn/

-----------------------------------------------------------

Linux

下伪终端是对应于

/dev/pts/x

,这个

/dev/pts

其实也只是

devpts

的挂载目录,通

过如下命令挂在的。

mount devpts /dev/pts -t devpts

伪终端

(Pseudo Terminal)

是成对的逻辑终设备

(

master

slave

设备

,

master

的操作会反映

slave

)

例如

/dev/ptyp3

/dev/ttyp3(

或者在设备文件系统中分别是

/dev/pty/m3

/dev/pty/s3)

。它

们与实际物理设备并不直接相关。如果一个程序把

ptyp3(master

设备

)

看作是一个串行端口设备,则它

对该端口的读

/

写操作会反映在该逻辑终端设备对应的另一个

ttyp3(slave

设备

)

上面。而

ttyp3

则是另

一个程序用于读写操作的逻辑设备。

这样,两个程序就可以通过这种逻辑设备进行互相交流,而其中一个使用

ttyp3

的程序则认为自己正在

与一个串行端口进行通信。这很象是逻辑设备对之间的管道操作。对于

ttyp3(s3)

,任何设计成使用一个

串行端口设备的程序都可以使用该逻辑设备。但对于使用

ptyp3

的程序,则需要专门设计来使用

ptyp3(m3)

逻辑设备。

例如,如果某人在网上使用

telnet

程序连接到你的计算机上,则

telnet

程序就可能会开始连接到设备

ptyp2(m2)

(

一个伪终端端口上

)

此时一个

getty

程序就应该运行在对应的

ttyp2(s2)

端口上。

telnet

从远端获取了一个字符

时,该字符就会通过

m2

s2

传递给

getty

程序,而

getty

程序就会通过

s2

m2

telnet

程序往网络上返回

”login:”

字符串信息。这样,登录程序与

telnet

程序就通

伪终端

行通信。通过使用适当的软件,就可以把两个甚至多个伪终端设备连接到同一个物理串行端口上。

但是到了现在,

/dev/pty/m

不再存在,只是以

file

/dev/ptmx

的一次打开)存在,

/dev/pty/s

应到了

/dev/pts/x

里。

故要创建伪终端,就必须打开

/dev/ptmx

文件。

一个典型的例子如下:

int main(){

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 */

glib

中的

ptsname

实现大致如下:

char

*

ptsname

(

int

fd

)

{

unsigned

int

pty_num

;