Trách nhiệm của từng thành phần Pseudo-Terminal (PTY) (phần mềm, phía chủ, bên nô lệ) là gì?


59

Tôi đang cố gắng tìm ra cách một tty hoạt động 1 (quy trình làm việc và trách nhiệm của từng yếu tố). Tôi đã đọc một số bài viết thú vị về nó, nhưng vẫn còn một số khu vực mờ.

Đây là những gì tôi hiểu cho đến nay:

  • Thiết bị đầu cuối mô phỏng thực hiện các cuộc gọi hệ thống khác nhau /dev/ptmx, phần chính của thiết bị đầu cuối giả.
  • Phần chính của thiết bị đầu cuối giả cấp phát một tệp trong /dev/pts/[0-N], tương ứng với cổng nối tiếp lỗi thời và "đính kèm" một thiết bị đầu cuối giả cho nó.
  • Thiết bị đầu cuối giả nô lệ giữ thông tin như Id phiên, công việc nền trước, kích thước màn hình.

Đây là câu hỏi của tôi:

  1. Ptmx có mục đích nào ngoài việc phân bổ phần nô lệ không? Liệu nó có cung cấp một số loại "trí thông minh" hay thiết bị đầu cuối giả lập (ví dụ xterm) có tất cả trí thông minh hành xử như một thiết bị đầu cuối không?
  2. Tại sao xterm phải tương tác với phần chính, vì nó chỉ chuyển tiếp stdout và stdin của phần nô lệ? Tại sao nó không thể trực tiếp viết và đọc từ tệp pts ?
  3. ID phiên có luôn được đính kèm với một tệp pts và ngược lại không? Tôi có thể gõ lệnh ps và tìm thấy 2 sessionId cho cùng / dev / pts / X không?
  4. Những thông tin khác không các ptscửa hàng? Xterm có tự cập nhật tất cả các trường hay không, hoặc ptmthêm một số "trí thông minh" vào nó?

1. Tôi dựa trên sự hiểu biết của mình về TTY được làm sáng tỏ bởi Linus AkessonLinux Kernel bởi Andries Brouwer , như một số câu hỏi khác trên các trang web này

Câu trả lời:


58

Trình giả lập thiết bị đầu cuối

Phía chính thay thế đường dây (cặp dây TX / RX) đi đến thiết bị đầu cuối.

Thiết bị đầu cuối hiển thị các ký tự mà nó nhận được trên một trong các dây (một số trong số đó là các ký tự điều khiển và làm cho nó thực hiện những việc như di chuyển con trỏ, thay đổi màu sắc ...) và gửi trên dây khác các ký tự tương ứng với các phím bạn nhập.

Các trình giả lập thiết bị đầu cuối như xterm không khác nhau ngoại trừ việc thay vì gửi và nhận các ký tự trên dây, chúng đọc và viết các ký tự trên bộ mô tả tệp của chúng cho phía chủ. Khi họ đã sinh ra thiết bị đầu cuối nô lệ và bắt đầu trình bày của bạn trên đó, họ không còn chạm vào đó nữa. Ngoài việc mô phỏng cặp dây, xterm cũng có thể thay đổi một số thuộc tính kỷ luật dòng thông qua bộ mô tả tệp đó sang phía chủ. Chẳng hạn, họ có thể cập nhật các thuộc tính kích thước để SIGWINCH được gửi đến các ứng dụng tương tác với pty nô lệ để thông báo cho họ về kích thước đã thay đổi.

Ngoài ra, có rất ít thông minh trong trình giả lập thiết bị đầu cuối / thiết bị đầu cuối.

Những gì bạn viết cho một thiết bị đầu cuối (như nô lệ pty) là những gì bạn muốn hiển thị ở đó, những gì bạn đọc từ nó là những gì bạn đã gõ ở đó, do đó, không có nghĩa gì khi trình giả lập thiết bị đầu cuối đọc hoặc ghi vào đó . Họ là những người ở đầu kia.


Các kỷ luật dòng tty

Rất nhiều thông tin tình báo là trong những kỷ luật dòng tty . Kỷ luật dòng là một mô-đun phần mềm (nằm trong trình điều khiển, trong kernel) được đẩy lên trên một thiết bị nối tiếp / pty nằm giữa thiết bị đó và đường / dây (phía chính cho pty).

Một dòng nối tiếp có thể có một thiết bị đầu cuối ở đầu kia, nhưng cũng có một con chuột hoặc một máy tính khác để kết nối mạng. Ví dụ, bạn có thể đính kèm một kỷ luật dòng SLIP để có giao diện mạng trên đầu thiết bị nối tiếp (hoặc thiết bị pty) hoặc bạn có thể có kỷ luật dòng tty . Kỷ luật dòng tty là kỷ luật dòng mặc định ít nhất là trên Linux đối với các thiết bị nối tiếp và pty. Trên Linux, bạn có thể thay đổi kỷ luật dòng với ldattach.

Bạn có thể thấy tác dụng của việc vô hiệu hóa kỷ luật dòng tty bằng cách phát hành stty raw -echo(lưu ý rằng dấu nhắc bash hoặc các ứng dụng tương tác khác như viđặt thiết bị đầu cuối ở chế độ chính xác mà chúng cần, vì vậy bạn muốn sử dụng ứng dụng câm như thế catđể trải nghiệm điều đó). Sau đó, mọi thứ được ghi vào thiết bị đầu cuối nô lệ sẽ ngay lập tức đến phía chủ để xterm đọc và mọi ký tự được viết bởi xterm sang phía chủ đều có sẵn để đọc từ thiết bị nô lệ.

Kỷ luật dòng là nơi trình soạn thảo dòng nội bộ của thiết bị đầu cuối được triển khai. Ví dụ với stty icanon echo(như là mặc định), khi bạn nhập a, xterm ghi avào bản gốc, sau đó dòng kỷ luật lặp lại (tạo asẵn để đọc bằng cách xtermhiển thị), nhưng không cung cấp bất cứ điều gì có sẵn để đọc ở phía nô lệ . Sau đó, nếu bạn gõ backspace, xterm gửi một ^?hoặc ^Hnhân vật, kỷ luật dòng (như ^?hoặc ^Htương ứng với erasethiết lập kỷ luật dòng) gửi lại trên tổng thể một ^H, space^Hcho xtermđến xóaabạn vừa gõ trên màn hình của nó và vẫn không gửi bất cứ thứ gì đến ứng dụng đang đọc từ phía nô lệ, nó chỉ cập nhật bộ đệm trình chỉnh sửa dòng bên trong để xóa cái mà abạn đã gõ trước đó.

Sau đó, khi bạn nhấn Enter, xterm sẽ gửi ^M(CR), mà kỷ luật dòng chuyển đổi trên đầu vào thành ^ J (LF) và gửi những gì bạn đã nhập cho đến nay để đọc ở phía nô lệ (một ứng dụng đọc trên /dev/pts/xsẽ nhận được những gì bạn đã nhập bao gồm cả LF, nhưng không phải avì bạn đã xóa nó), trong khi ở phía chính, nó sẽ gửi CR và LF để di chuyển con trỏ đến dòng tiếp theo và bắt đầu màn hình.

Kỷ luật dòng cũng chịu trách nhiệm gửi SIGINTtín hiệu đến nhóm quy trình tiền cảnh của thiết bị đầu cuối khi nó nhận được một ^Cký tự ở phía chủ, v.v.

Nhiều ứng dụng thiết bị đầu cuối tương tác vô hiệu hóa hầu hết các tính năng của kỷ luật dòng đó để tự thực hiện. Nhưng trong mọi trường hợp, hãy cẩn thận rằng thiết bị đầu cuối ( xterm) ít liên quan đến điều đó (ngoại trừ hiển thị những gì nó được bảo hiển thị).

Và có thể chỉ có một phiên cho mỗi quy trình và mỗi thiết bị đầu cuối. Một phiên có thể có một thiết bị đầu cuối kiểm soát được gắn vào nó nhưng không phải (tất cả các phiên bắt đầu mà không có thiết bị đầu cuối cho đến khi chúng mở một thiết bị đầu cuối). xterm, trong quá trình nó thực thi shell của bạn thường sẽ tạo ra một phiên mới (và do đó tách ra khỏi thiết bị đầu cuối nơi bạn khởi chạy xtermnếu có), mở cái mới /dev/pts/xmà nó đã sinh ra, bằng cách gắn thiết bị đầu cuối đó vào phiên mới. Sau đó, nó sẽ thực thi shell của bạn trong quá trình đó, vì vậy shell của bạn sẽ trở thành người dẫn đầu phiên. Shell của bạn hoặc bất kỳ shell tương tác nào trong phiên đó thường sẽ xử lý các nhóm quy trình và tcsetpgrp(), để đặt các công việc nền trước và nền cho thiết bị đầu cuối đó.

Đối với những thông tin nào được lưu trữ bởi một thiết bị đầu cuối với kỷ luật tty (nối tiếp hoặc pty) , đó thường là những gì sttylệnh hiển thị và sửa đổi. Tất cả cấu hình kỷ luật: kích thước màn hình đầu cuối, cục bộ, cờ đầu ra đầu vào, cài đặt cho các ký tự đặc biệt (như ^ C, ^ Z ...), tốc độ đầu vào và đầu ra (không liên quan đến ptys). Điều đó tương ứng với tcgetattr()/ các tcsetattr()chức năng trên bản đồ Linux với TCGETS/ TCSETSioctls và TIOCGWINSZ/ TIOCSWINSZcho kích thước màn hình. Bạn có thể lập luận rằng nhóm quy trình tiền cảnh hiện tại là một thông tin khác được lưu trữ trong thiết bị đầu cuối ( tcsetpgrp()/ tcgetpgrp(), TIOC{G,S}PGRPioctls) hoặc bộ đệm đầu vào hoặc đầu ra hiện tại.

Lưu ý rằng thông tin kích thước màn hình được lưu trữ trong thiết bị đầu cuối có thể không phản ánh đúng thực tế. Trình giả lập thiết bị đầu cuối thường sẽ đặt nó (thông qua cùng một ioctl trên kích thước chính) khi cửa sổ của nó được thay đổi kích thước, nhưng nó có thể không đồng bộ nếu một ứng dụng gọi ioctl ở phía nô lệ hoặc khi không thay đổi kích thước (trong trường hợp thay đổi kích thước của một kết nối ssh ngụ ý một pty khác được sinh ra bởi sshdnếu sshbỏ qua SIGWINCHví dụ). Một số thiết bị đầu cuối cũng có thể được truy vấn kích thước của chúng thông qua các chuỗi thoát, vì vậy một ứng dụng có thể truy vấn theo cách đó và cập nhật kỷ luật dòng với thông tin đó.

Để biết thêm chi tiết, bạn có thể xem qua các trang termiostty_ioctlman trên Debian chẳng hạn.

Để chơi với các môn học khác:

  1. Giả lập một con chuột với một thiết bị đầu cuối giả:

    socat pty,link=mouse fifo:fifo
    sudo inputattach -msc mouse # sets the MOUSE line discipline and specifies protocol
    xinput list # see the new mouse there
    exec 3<> fifo
    printf '\207\12\0' >&3 # moves the cursor 10 pixels to the right
    

    Ở trên, phía chủ của pty được kết thúc bởi socat trên một ống có tên ( fifo). Chúng tôi kết nối fifo đó với một tiến trình (trình bao) ghi 0x87 0x0a 0x00 có nghĩa là trong giao thức hệ thống chuột no button pressed, delta(x,y) = (10,0). Ở đây, chúng tôi (vỏ) không mô phỏng thiết bị đầu cuối, nhưng một con chuột, 3 byte chúng tôi gửi sẽ không được đọc (có khả năng chuyển đổi) bởi một ứng dụng từ thiết bị đầu cuối ( mousebên trên là một liên kết tượng trưng được tạo bởi socatmột số /dev/pts/xthiết bị) , nhưng được hiểu là một sự kiện nhập chuột.

  2. Tạo giao diện SLIP:

    # on hostA
    socat tcp-listen:12345,reuseaddr pty,link=interface
    # after connection from hostB:
    sudo ldattach SLIP interface
    ifconfig -a # see the new interface there
    sudo ifconfig sl0 192.168.123.1/24
    
    # on hostB
    socat -v -x pty,link=interface tcp:hostA:12345
    sudo ldattach SLIP interface
    sudo ifconfig sl0 192.168.123.2/24
    ping 192.168.123.1 # see the packets on socat output
    

    Ở trên, dây nối tiếp được mô phỏng socatnhư một ổ cắm TCP ở giữa hostA và hostB. Kỷ luật dòng SLIP diễn giải các byte được trao đổi trên dòng ảo đó dưới dạng các gói IP được đóng gói SLIP để phân phối trên sl0giao diện.


1
Đây là câu trả lời tốt nhất. Tôi đánh dấu nó là đúng và nâng cao nó. Bạn có thể thêm phần cuối cùng về thông tin mà pts lưu trữ không? Theo trang này (chương cấu hình thiết bị TTY) , pts lưu các giá trị như số hàng và số dòng. Họ có bất kỳ thông tin khác mà nó lưu trữ?
Pierre-Jean

@ Pierre-Jean, thêm thông tin.
Stéphane Chazelas

Mặc dù câu trả lời của bạn vượt quá thỏa đáng, nhưng sẽ rất thú vị khi xem một ví dụ đơn giản hơn về cách bạn thực sự tạo một / dev / pts / M. Tôi đã thử sử dụng cat /dev/ptmx &mà mở ra một pty mới, nhưng sau đó không có quá trình tôi có thể tìm thấy liên quan đến nó, vậy bạn sẽ sử dụng nó như thế nào? Thứ hai tôi đã thử echo "1" >/dev/ptmx, nhưng điều đó chẳng làm gì cả ... Tại sao tôi lại quan tâm đến điều này? Thông báo thường xuyên khi một người kết nối từ xa thông qua ssh(ví dụ), bạn gặp phải PTY allocation request failedhoặc No controlling tty: open /dev/ttylỗi, điều này ngăn cản kiểm soát công việc. Nó sẽ là tốt đẹp để hiểu rõ hơn những người.
not2qubit

@ user1147688, làm thế nào để tạo pty sẽ là một câu hỏi khác. Điều này đã có quá nhiều câu hỏi cùng một lúc. Nhưng xem ptytrang người đàn ông của bạn để biết chi tiết.
Stéphane Chazelas

@ StéphaneChazelas Làm rõ nhỏ: 1. Vì vậy, bạn đang nói rằng dòng chảy giống như physical term---- tty---- bashtrên thiết bị đầu cuối và pty(m)---- tty---- pty(s)---- bashtrên trình giả lập thiết bị đầu cuối? Có phải ttykỷ luật chịu trách nhiệm cho tiếng vang nhân vật trên thiết bị đầu cuối vật lý quá? 2. Đây có phải là chương trình giả lập thiết bị đầu cuối kết nối với bàn phím / màn hình để quản lý đầu vào không? 3. Theo những gì tôi hiểu, bạn đã nói rằng bộ đệm dòng lệnh bash / tất cả đầu vào đầu cuối được thực hiện theo ttykỷ luật dòng thay vì bộ đệm I / O của các hàm CI / O. Điều này có đúng không?
đàn

29

Chỉnh sửa: Vì câu trả lời này, tôi đã viết một bài viết dành riêng trên blog của mình, cho những người quan tâm đến nhiều chi tiết hơn.


Sau khi đọc rất nhiều, đây là những gì tôi hiểu.

  • Ptmx có mục đích nào ngoài việc phân bổ phần nô lệ không? Liệu nó có cung cấp một số loại "trí thông minh" hay thiết bị đầu cuối giả lập (ví dụ xterm) có tất cả trí thông minh hành xử như một thiết bị đầu cuối không?

    /dev/ptmxkhông phân bổ phần nô lệ : nó phân bổ "phần chính thiết bị đầu cuối giả". / dev / ptmx không phải là thiết bị đầu cuối giả chính : nó là bộ ghép kênh chính thiết bị đầu cuối giả . Nó đã được tạo ra với tiêu chuẩn PTY Unix98 để tránh các điều kiện chủng tộc khi phân bổ thiết bị đầu cuối giả ( nguồn ).

    Phần chính (ptm) của thiết bị đầu cuối giả không được biểu diễn trên hệ thống tệp. Nó được đại diện bởi một mô tả tập tin.

    Phần nô lệ (pts) được biểu thị bằng một tệp trong /dev/pts/Nđó Nlà một số.

    Các điểm thu được từ PTM thông qua các cuộc gọi liên tiếp của grandpt, unlockpt, ptsname. ( Nguồn )

    Ptm thay thế trình điều khiển AUR dành riêng để giao tiếp với thiết bị và phiên bản dòng. Vì vậy, nó không mô phỏng theo bất kỳ cách nào một thiết bị đầu cuối nhưng cung cấp tính năng của phiên bản dòng và cung cấp một cách để trực quan hóa và giao tiếp với pts. ( Nguồn )

    Dưới đây là biểu đồ về TTY được kết nối với thiết bị phần cứng Giao tiếp TTY với AUR

    Và đây là một biểu đồ của một tty kết nối với ptm Giao tiếp TTY với PTM

    Tệp ptm xử lý các đối số Ioctl khác nhau (ISPTM, UNLKPT, TIOCREMOTE, TIOCSIGNAL) so với pts.

  • Tại sao xterm phải tương tác với phần chính, vì nó chỉ chuyển tiếp stdout và stdin của phần nô lệ? Tại sao nó không thể trực tiếp viết và đọc từ tệp pts?

    Các quy trình tương tác với các thiết bị thông qua các hành động được thực hiện đối với một tệp ảo (đọc, ghi, ioctl ..). Bản thân tệp không tồn tại và trình điều khiển sử dụng tệp để kích hoạt các hành động khi các phương thức đọc hoặc ghi được gọi. (Xem Annexe để biết thông tin về trình điều khiển)

    Một TTY xác định một cách chính xác để tương tác với nó. Các quy trình viết và đọc từ thiết bị và mong đợi hành vi tương tự bất kể loại TTY nào được triển khai.

    • chức năng đọc được sử dụng bởi các quy trình để đọc các mục từ thiết bị đầu cuối
    • chức năng ghi được sử dụng bởi các quá trình để gửi đầu ra đến thiết bị đầu cuối

    Các pts hành xử như một trình điều khiển TTY. Phương thức đọc và ghi của nó được sử dụng để thực hiện hành vi TTY Driver. Vì không có thiết bị thực để gửi dữ liệu, nên một cặp luồng được tạo và ptm thực hiện chức năng đọc để đọc dữ liệu được gửi bởi pts đến luồng và chức năng ghi để gửi dữ liệu đến luồng sẽ khả dụng khi pts sẽ đọc nó.

    Hãy nhớ rằng, tệp đại diện cho một thiết bị không phải là một tệp cổ điển và nếu xtermmuốn xem những gì đã được ghi vào tệp, nó không thể chỉ đơn giản gọi là mở và đọc nó, vì các chức năng này có hành vi hoàn toàn khác ở đây.

  • ID phiên luôn được đính kèm với một tệp pts và ngược lại? Tôi có thể gõ lệnh ps và tìm thấy 2 sessionId cho cùng / dev / pts / X không?

    Tôi không nghĩ vậy, Id phiên được xác định bởi quy trình đầu tiên gắn pts (nói chung là bash) và tôi không thấy cách tạo phiên khác và gắn nó vào cùng pts. Có lẽ một công cụ như socatcó thể làm điều này?

  • Những thông tin khác mà pts lưu trữ? Xterm có tự cập nhật tất cả các lĩnh vực không, hay ptm có thêm một số "trí thông minh" nào trên đó không?

    Các điểm lưu trữ 2 loại thông tin liên quan đến thiết bị đầu cuối mà nó tiếp xúc: sự TerminfoTermcap. Thông thường, nhiều trình giả lập thiết bị đầu cuối dựa trên thư viện quản lý thông tin termcap cho chúng (điều đó sẽ cung cấp tất cả các giá trị khả năng để mô phỏng VTX100 chẳng hạn). Một ví dụ của một thư viện như vậy là libvte . Chỉnh sửa (xem bình luậnStephane Chazelas): Các khả năng của thiết bị đầu cuối không được lưu trữ bởi các pts.

Annexe


termcap và terminfo là cơ sở dữ liệu về khả năng giả lập thiết bị đầu cuối hoặc thiết bị đầu cuối, chúng không liên quan gì đến các thiết bị tty hoặc pty.
Stéphane Chazelas 17/03/2016

Ok, tôi sẽ chỉnh sửa câu trả lời của tôi. Cảm ơn đã bình luận. Bạn có thể thêm thông tin này về pts vào câu trả lời của bạn nếu bạn biết nó (ví dụ như pts không lưu trữ kích thước màn hình)?
Pierre-Jean

6
Đây là những hình ảnh đẹp. Bạn đã sử dụng phần mềm nào để tạo ra chúng?
Gilles 'SO- ngừng trở nên xấu xa'

5
@Gilles Cảm ơn bạn. Tôi đã làm chúng với Inkscape , một trình soạn thảo đồ họa vector nguồn mở. Đây có thể không phải là cách hiệu quả nhất để làm loại đồ họa này, nhưng nếu bạn quan tâm, tôi đã viết một bài viết về cách tạo ra loại bản vẽ isometric này.
Pierre-Jean

Tôi không nghĩ bạn có thể tham gia hai phiên vào thiết bị đầu cuối kiểm soát hoặc để một phiên có nhiều thiết bị đầu cuối kiểm soát
炸鱼 薯条 薯条

9

Đây là một kế hoạch tôi đã thực hiện một thời gian trước về cách làm sshdviệc. Nó không liên quan đến hoạt động của kỷ luật dòng và công cụ, nhưng nó thêm một minh họa thực tế về người tương tác với những gì:

nhập mô tả hình ảnh ở đây


Cám ơn bạn rất nhiều về điều này. Tôi đã dành 2 ngày cố gắng để tìm ra nó. Tôi chỉ tự hỏi điều gì xảy ra khi không có pty được khởi tạo. stdin không tồn tại, tốt thôi, nhưng stdout và stderr được viết ở đâu?
anh chàng nhỏ bé

@emmascul Nghiệp rất vui vì nó đã giúp bạn. Xin lỗi, tôi không thể hiểu ý của bạn là "khi không có pty được khởi tạo". Bạn có thể đưa ra một ví dụ về khi pty không được khởi tạo?
Boris Burkov

1
"Không có pty được khởi tạo" Ý tôi là khi bạn chạy ssh với -T, người đàn ông nói rằng nó vô hiệu hóa phân bổ thiết bị đầu cuối giả. ví dụ: ssh -T emasculateur@localhost "sleep 10" sau đó ps aux|grep sleephiển thị điều này: emasculateur 21826 0.0 0.0 23032 3728 ? Ss 02:49 0:00 zsh -c sleep 10 Trong trường hợp đó bash viết stdoutstderr? Tôi hy vọng câu hỏi của tôi có ý nghĩa.
anh chàng nhỏ bé

@emmascul Nghiệp hm, đó là một câu hỏi hay, có ý nghĩa, tôi chỉ không nghĩ về nó sớm hơn. Tôi đoán đó là cách, bạn bắt đầu quá trình của mình như một trình nền trên máy từ xa, không có thiết bị đầu cuối liên quan. Tôi đoán là đầu vào / đầu ra / lỗi tiêu chuẩn của nó chỉ /dev/nullgiống như một daemon bình thường, nhưng không chắc chắn. Xem thêm: serverfault.com/questions/593399/ Kẻ
Boris Burkov

@emmascul Nghiệp Tôi cũng tình cờ phát hiện ra một trường hợp khác với bạn: nếu quy trình của bạn đã từng có thiết bị đầu cuối, nhưng thiết bị đầu cuối đó đã bị đóng, quá trình sẽ nhận được SIGHUP từ kernel khi đọc / ghi vào stdout / stdin. Điều này thường giết chết các công việc, bắt đầu thông qua ssh mà không nohuphoặc screen/ tmux.
Boris Burkov

0

man pts nói:

Tệp / dev / ptmx là một tệp ký tự có số chính 5 và số phụ 2, thường là ở chế độ 0666 và chủ sở hữu. Nhóm của root.root. Nó được sử dụng để tạo một cặp chủ và thiết bị đầu cuối giả.

Khi một quá trình mở / dev / ptmx, nó sẽ nhận được một bộ mô tả tệp cho một thiết bị đầu cuối giả (PTM) và một thiết bị nô lệ đầu cuối giả (PTS) được tạo trong thư mục / dev / pts. Mỗi bộ mô tả tệp thu được bằng cách mở / dev / ptmx là một PTM độc lập với PTS được liên kết riêng, có thể tìm thấy đường dẫn của nó bằng cách chuyển bộ mô tả đến ptsname (3).

Trước khi mở nô lệ đầu cuối giả, bạn phải chuyển mô tả tệp của chủ để cấp (3) và mở khóa (3).

Khi cả chủ và thiết bị đầu cuối giả đều mở, nô lệ cung cấp các quy trình với giao diện giống hệt với thiết bị đầu cuối thực.

Dữ liệu được ghi vào nô lệ được trình bày trên bộ mô tả chính làm đầu vào. Dữ liệu được ghi cho chủ được trình bày cho nô lệ làm đầu vào.

Trong thực tế, các thiết bị đầu cuối giả được sử dụng để thực hiện các trình giả lập thiết bị đầu cuối như xterm (1), trong đó dữ liệu được đọc từ thiết bị đầu cuối giả được ứng dụng diễn giải theo cách giống như một thiết bị đầu cuối thực sẽ diễn giải dữ liệu và để thực hiện từ xa các chương trình -login như sshd (8), trong đó dữ liệu được đọc từ thiết bị đầu cuối giả được gửi qua mạng đến một chương trình máy khách được kết nối với trình mô phỏng đầu cuối hoặc đầu cuối.

Thiết bị đầu cuối giả cũng có thể được sử dụng để gửi đầu vào cho các chương trình thường từ chối đọc đầu vào từ các đường ống (chẳng hạn như su (8) và passwd (8)).

Về /dev/pts/X indexing:

mỗi X là một phiên bạn mở nó, vì vậy nô lệ cần lập chỉ mục.

Giới thiệu TeteType (/dev/ttyN):

Đó là giao diện điều khiển thực sự đã được tạo bởi hệ thống khởi động của bạn, chẳng hạn như sysV.

Về lý do tại sao nô lệ bắt nguồn từ chủ: http : //commons.wik mega.org/wiki/File:Termios-script-diagram.png


Tôi xin lỗi, nhưng bạn đã không trả lời các câu hỏi. Tôi đã đọc trang người đàn ông và xem biểu đồ này, nhưng hành vi không rõ ràng. Bạn có thể, như gợi ý illuminÉ, mở rộng câu trả lời của bạn theo các câu hỏi không?
Pierre-Jean

SORRY FOR LATE
tiếng

Để sử dụng hệ thống con giả TTY, phải cài đặt một nút cho trình điều khiển phía chính / dev / ptmx và số N của trình điều khiển nô lệ (N được xác định khi cài đặt). Tên của các thiết bị nô lệ là / dev / pts / M trong đó M có các giá trị từ 0 đến N-1. Một người dùng truy cập thiết bị giả TTY thông qua thiết bị chính (được gọi là ptm) mà lần lượt được truy cập thông qua trình điều khiển nhân bản. Thiết bị chính được thiết lập dưới dạng thiết bị nhân bản trong đó số thiết bị chính của nó là chính cho thiết bị nhân bản và thiết bị của nó số thiết bị nhỏ là chính cho trình điều khiển ptm.
Tiếng

vâng tôi đọc trang man pan ....!
Tiếng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.