微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么写STDIN工作?

我有以下代码

int main() { char str[] = "Hellon"; write(0,str,6); // write() to STDIN return 0; }

当我编译并执行这个程序时,在terminal打印了"Hello" 。

为什么它的工作, write()用1 (STDOUT)replace我的0 (STDIN)参数?

如何编译和build立在Windows手写的makefile的c + +应用程序?

如何通过每次分派新的subprocess多次运行同一个jar文件

如何访问使用C / C ++编写的函数到ruby脚本?

坏的地址在cv :: Mat

如何使内联函数只占用可执行文件一个副本的内存空间

C / C ++ URL解码库

结构中的“s”是什么意思?

使用search-ms:或search:协议来检索search结果作为IShellItem

libpcap(> 1.0.0)和PF_RING效率

InternetCanonicalizeUrl无法解码变音符号

那么,旧的Unix系统原来是用于串口终端的,一个特殊的程序getty负责管理串口设备,打开和配置串口设备,在输入连接(中断信号)上显示消息,并将打开的文件描述符传递给登录然后shell。

它用来打开tty设备作为输入/输出来配置它,然后在文件描述符0,1和2中复制。认情况下(仍然是旧的) stty命令认在标准输入上运行。 为了确保兼容性,在现代Linux上,当连接到终端时,仍然会打开文件描述符0以进行输入/输出

当标准输入连接到终端时,它可以作为一个快速和肮脏的黑客来显示提示,因为如果标准输入被重定向一个只读文件或管道,所有的写入将会失败(对进程没有任何损害)什么都不会打印。 但无论如何,这只是一个肮脏的黑客行为:想象一下,如果调用者将输入/输出文件作为标准输入传递,会发生什么……这就是为什么好的做法建议使用stderr来提示或消息,以避免让他们在重定向流中丢失保持输出和输入分开的流,这既不硬也不更长。

TL / DR:如果连接到终端,即使名称和标准用法可能表示它是只读的, 也会打开标准输入进行输入/输出

因为认情况下你的终端会把stdin回显给控制台。 尝试将其重定向一个文件; 它并没有写入标准输出

你用fwrite写了吗? 写入的第一个参数是“文件描述符”,但不是stdin。 尝试做一个fwrite到标准输入 – 它不会发生。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐