2011-12-04 40 views
10

Tôi đang cố gắng tìm ra cách sử dụng giả của thiết bị đầu cuối trong linux, về cơ bản tôi muốn tạo một bản sao telnetd, một cái gì đó tôi đã đề cập in an earlier question.Làm thế nào để sử dụng thiết bị đầu cuối giả trong Linux với C?

Tôi hiểu các khái niệm về chủ và nô lệ bị đầu cuối, và tôi có một nắm bắt cơ bản về cách sử dụng syscalls trong C.

Câu hỏi của tôi liên quan đến bước tiếp theo sau khi mở một tập tin mô tả nô lệ/tổng thể. Làm thế nào để tôi khởi động getty trong nô lệ? Có tài khoản tốt nào trên mạng để sử dụng forkpty(), openpty() hoặc API khác không?

Một số ví dụ trong C sẽ hữu ích. This was a very similar question, nhưng không ai thực sự cung cấp bất kỳ ví dụ nào.

Trả lời

9

Advanced Programming in the Unix Environment, 2nd Edition có chương tuyệt vời trên lớp giả thiết bị đầu cuối có sẵn trong Linux. Phần tốt nhất là source code có trình điều khiển pty và minh họa rõ ràng cách sử dụng giao diện pty. (Chương trình pty nó được xây dựng rất hữu ích trong đúng nghĩa của nó nếu bạn muốn lái xe một chương trình thiết bị đầu cuối chỉ theo chương trình nhưng không muốn sử dụng expect(1).)

+0

Các liên kết mã nguồn là một 404 không tìm thấy trang –

+0

@ JérémyPouyet, nhờ thông báo; Tôi đã cố định liên kết để trỏ đến mã phiên bản thứ hai (đó là mã tôi quen thuộc) - có lẽ ấn bản thứ ba sẽ là lựa chọn tốt hơn, nhưng tôi chưa đích thân đọc mã đó. Một ngày nào đó. :) – sarnold

+0

Bạn có thể tìm hiểu giấy phép của mã đó không? –

0

Bạn không lauch một getty cho ptys. Getty chỉ là phần "nghe" của quá trình. Đối với các thiết bị đầu cuối cứng, mỗi thiết bị đầu cuối riêng lẻ được "nghe" liên tục. Đối với telnet, daemon thực hiện phần nghe (trên ổ cắm) và xử lý yêu cầu kết nối bằng cách tạo một cặp pty và fork() ing/exec() ing. Và thực sự: APUE xử lý pty rất tốt.

3

bao gồm

#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); 
... 
} 

tôi đăng ví dụ đơn giản chứng minh thiết bị đầu cuối giả khái niệm chủ nô lệ. hãy truy cập thông qua liên kết này để có được sự hiểu biết rõ ràng về thiết bị đầu cuối trong Linux http://www.linusakesson.net/programming/tty/

+0

Đây là câu trả lời đơn giản. Nó được ghi lại ở đây: http://linux.die.net/man/4/ptmx – EdH

Các vấn đề liên quan