14

Linuxで疑似端末を使用する方法を理解しようとしています。基本的には、前の質問で述べたtelnetdクローンを作成したいと思います。

マスター端末とスレーブ端末の概念を理解しており、Cでのシステムコールの使用方法について基本的な知識があります。

私の質問は、スレーブ/マスターファイル記述子を開いた後の次のステップに関するものです。スレーブでgettyを起動するにはどうすればよいですか?forkpty()、openpty()、または別のAPIを使用するための優れたリソースはネット上にありますか?

Cのいくつかの例が役立ちます。これは非常によく似た質問でしたが、実際に例を提供した人は誰もいませんでした。

4

3 に答える 3

11

Advanced Programming in the Unix Env​​ironment, 2nd Editionには、Linux で利用可能な疑似端末層に関する優れた章があります。最良の部分は、ドライバーを含むソース コードptyであり、インターフェイスの使用方法を非常に明確に示していptyます。(ptyそれがビルドするプログラムは、ターミナルのみのプログラムをプログラムで動かしたいが、expect(1).

于 2011-12-04T08:06:26.353 に答える
5

含む

#include <sys/stat.h>

#include <fcntl.h>

#define _XOPEN_SOURCE

#include <stdlib.h>

int main(int argc, char **argv) 
{
char *slavename;
int masterfd;
masterfd = open("/dev/ptmx", O_RDWR);
grantpt(masterfd);
unlockpt(masterfd);
slavename = ptsname(masterfd);
...
}

疑似端末マスタースレーブの概念を示す簡単な例を投稿しました。Linux の端末を明確に理解するには、このリンクを参照して ください http://www.linusakesson.net/programming/tty/

于 2014-09-25T11:21:08.000 に答える
0

ptys の gettyを起動しません。getty はプロセスの「リスナー」部分にすぎません。ハードワイヤード端末の場合、個々の端末デバイスは常に「リッスン」しています。telnet の場合、デーモンは (ソケット上で) リッスン部分を実行し、pty ペアを作成して接続要求を処理し、fork()ing / exec()ing します。実際、APUE は pty を非常にうまく処理します。

于 2011-12-04T12:03:26.007 に答える