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] 举报,一经查实,本站将立刻删除。