pty 相关问题

pty是一个伪终端 - 它是一个软件实现,它作为终端出现在附加程序中,但不是直接与“真实”终端通信,而是将输入和输出传输到另一个程序。

macOS 上 tty 的 lseek 是做什么的?

考虑以下 C 程序,名为 odd.c (因为它所做的事情没有意义): #包括 #包括 #包括 #包括 考虑下面的 C 程序,名为 weird.c(因为它所做的事情没有意义): #include <inttypes.h> #include <stdint.h> #include <stdio.h> #include <unistd.h> int main(void) { off_t result = lseek(STDOUT_FILENO, (off_t)INT64_MAX, SEEK_SET); if (result != (off_t)-1) printf("Seek successful to position %" PRId64 "\n", (int64_t)INT64_MAX); else perror("lseek failed"); return 0; } 从终端窗口编译并运行它,例如gcc -o weird weird.c && ./weird。从 tty(终端窗口、SSH 会话等)运行它非常重要,因此 stdout 是一个 tty。 在 Linux 上,它将失败并出现错误 lseek failed: Illegal seek – 这是有道理的,在 tty 上查找没有多大意义。 但是,在 macOS 上,它的行为有所不同 - 程序退出而不打印任何内容,然后 shell 也退出。我只能假设这是因为 tty 已进入某种非法状态。但这里到底发生了什么? 顺便说一句,我猜测 macOS 的行为与 FreeBSD 类似。但是 FreeBSD 14.1-RELEASE (amd64) 再次有不同的行为 – 它打印: Seek successful to position 9223372036854775807 这比 macOS 的做法更容易理解(例如,将无意义的操作视为无操作,而不是像 Linux 那样出错。) 黑客新闻上的用户jepler指出了解释。 注意vn_write函数中的这段代码bsd/vfs/vfs_vnops.c: if (write_offset == INT64_MAX) { /* writes are not possible */ error = EFBIG; goto error_out; } 基本上发生的事情是这样的: 在 macOS 中,与 Linux 不同,您可以使用 lseek 设置终端的偏移量 - 即使偏移量实际上没有执行任何操作 但是,一旦偏移量达到 INT64_MAX,进一步的写入尝试就会失败并出现 EFBIG,除非您返回到更早的某个位置。 shell 退出的原因是大多数 shell 在无法写入 stdout/stderr 时退出。 如果您修改我的测试程序以寻求例如INT64_MAX-100,在所有输出开始失败之前,您将能够打印 100 个字节的输出。 此代码似乎已在 xnu-7195.50.7.100.1 (macOS 11 Big Sur) 中引入 - 它在 xnu-6153.11.26 (macOS 10.15 Catalina) 中不存在。 FreeBSD 似乎还允许您在终端中 lseek 到任意偏移量 - 但与 macOS 11+ 不同,如果您查找到 INT64_MAX,则不会拒绝进一步写入。

回答 1 投票 0

tty、pty、xterm 和用户进程如何协同工作?

我正在阅读《TTY 揭秘》,试图对 tty、pty 有一些了解。 读完前半部分。当我输入一些内容时,我无法全面了解整个事情是如何工作的

回答 1 投票 0

尝试在 pty 中强制运行 `su'

我有一个 shell,我在其中使用 su -l anotheruser 切换到另一个用户,这主要有效 但是,当没有分配给 su 的 pty 时,会出错: su:必须从终端运行 所以,我尝试...

回答 1 投票 0

socat 模拟嘈杂的串行线

出于教育目的,我有一些场景需要处理。 主要是使用 socat 模拟嘈杂的串行线(我目前有版本 1.7.4) 我将详细说明: 我的软件有...

回答 1 投票 0

Perl 中 ioctl 的第三个参数

背景:我正在尝试仅使用“Git for windows”附带的工具创建一个伪终端,所以如果 XYZ 需要额外的 na,请不要告诉我“只需安装工具 XYZ”...

回答 1 投票 0

它有一个Python等效的node-pty模块

我们有一个站点,它使用 node-pty 从本地 Node.js 代理公开远程 shell 终端。我们还有一个基于 Python 的代理,并希望提供经验。 Node.js 代码看起来...

回答 1 投票 0

键盘中断在子进程内运行的 Docker 容器进程

我目前正在构建一个将 Docker 容器连接到 websocket 的系统,然后客户端可以通过 websocket 与该容器交互。我想给客户能力...

回答 1 投票 0

如何使用socat pty通过两个C程序发送和接收数据?

我正在尝试使用伪 tty 发送和接收数据,以便稍后使用链接到串行 RS232 USB 适配器的真实 tty。 我首先使用 socat 创建伪 tty: sudo socat -d -d pty,link=./

回答 1 投票 0

我无法使用nodeJS和websocket将docker容器与我的Web终端连接

以下是我目前正在处理的文件: const express = require('express'); const http = require('http'); const { 服务器 } = require("socket.io"); const Docker = require('dockerode'); ...

回答 1 投票 0

如果程序读取和写入同一个缓冲区会发生什么?

我遇到的是我写了一个简单的python脚本,名为tt.py: 导入时间 而真实: 打印(123) 睡眠时间(0.5) 我通过 python tt.py & 运行它,它将持续输出到终端 123...

回答 3 投票 0

PTY/TTY - 仅使用 Slave FD 有什么不能做的

问题: 如果我有一个 pty 或 tty 主/从对,如果我只有从节点的文件描述符,我不能用它做什么?或者,换句话说:只有拥有主节点的文件我才能做什么

回答 1 投票 0

运行 bash 的子进程在执行终端窗口上打印 ssh 登录提示符,而不是通过管道输入的代码,我不知道为什么

我正在用 C 语言为老式串行终端编写一个兼容层。它不支持正常的 ANSI 转义序列等,所以我使用一个程序作为 bash 和 te 之间的中间人...

回答 1 投票 0

python 2.7 - 与 mpg123 的子进程控制交互

几周前我在这里问了一个与此相关的问题: Python、mpg123 和子进程未正确使用 stdin.write 或通信 感谢那里的帮助,我能够做我需要的事情......

回答 2 投票 0

与终端 pty 主机进程的连接无响应

安装 VSCode 后,我开始收到此特定通知: 与终端 pty 主机进程的连接无响应,终端可能停止工作。 该通知...

回答 7 投票 0

尝试在终端模拟器中读取命令输出时,PTY 输出挂起

我正在用 Rust 创建一个终端模拟器,目前正在尝试伪终端 (PTY) 并尝试捕获在 PTY 中执行的 shell 命令的输出。然而,...

回答 1 投票 0

尝试在终端仿真器中读取命令输出时,Rust PTY 输出挂起

我正在用 Rust 创建一个终端模拟器,目前正在尝试伪终端 (PTY) 并尝试捕获在 PTY 中执行的 shell 命令的输出。然而,...

回答 1 投票 0

VScode与WSL连接“与终端pty主机进程的连接无响应,终端可能停止工作。”

我在 Windows 10 上安装了 wsl 2,并且我已将 VScode 与 wsl 连接。很多时候,当我在 VScode 中使用 wsl 环境运行 gatsby 应用程序时。我收到错误: 与终端 pty 的连接

回答 3 投票 0

如何监视进程和终端之间的通信?

我有一个由第三方开发的与终端通信的Linux进程。为了调试,我希望看到通信来回。 人们可能会认为猫会做到这一点(...

回答 8 投票 0

要启用并行构建,请添加“/m”开关

我想运行此示例 https://github.com/Gottox/node-webterm ,但是当我执行命令 npm install 时,它显示错误消息。 在此解决方案中一次构建一个项目。启用

回答 1 投票 0

无法 ssh 进入 git:通道 0 上的 PTY 分配请求失败

我正在尝试更新自制程序,但无法连接到 git.. 我看到 https 没有通过,当我尝试 ssh -t 时,我得到: PTY 分配请求在通道 0 上失败 这些是我的结果表...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.