C 语言 print 默认输出

2018-12-11 00:10:35 +08:00
 mainlong

刚刚看 CPP 的一点想法,请大伙斧正

print 函数,输出到显示器。

print 函数基础定义就是输出参数到文件中,这种长期使用的东西,有最常用的输出文件,那就把这个最常用输出文件设定为默认输出,就是显示器。我没看 stdio.h 文件,里面应该可以改的,那么有些行业软件的话,可以修改 stdio.h 文件,修改其中的显示器为其他参数。

然后这个重定向>,其实就是普通输出到指定文件。 我看重定向,|和 linux 中的管道命令应该是一个意思。 我不知道重定向的历史起源,见识狭窄,在 print 函数输出这个问题上,我觉得应该没必要有这个东西,本来是基础参数,输出到显示器是默认参数。是不是借用了重定向方便解释呢?

3044 次点击
所在节点    编程
7 条回复
pkookp8
2018-12-11 00:44:52 +08:00
虽然没看懂楼主在问什么,但是一切都是文件,标准输出就是文件,fd 等于 1,标准输入等于 0,标准错误是 2
程序内部重定向就是关了标准输出,重新打开一个文件,自然等于 1
>>和|是 shell 完成的
要改可以,把 libc 改了(也可能在别的库),你的程序才能识别
,或者改内核
misaka19000
2018-12-11 00:46:39 +08:00
感觉你说的好混乱啊。。。

输出从系统调用的层面来说,输出到磁盘文件和输出到标准输出,它们只是 fd 不一样而已

至于 重定向 我想只是 shell 把前一个进程的标准输出写入了指定文件而已
KeepPro
2018-12-11 00:54:25 +08:00
按 POSIX 惯例,0 是标准输入,1 是标准输出,2 是错误输出。
一般这个都是在<unistd.h>里面有定义的符号常量。
具体你可以参考下 APUE 这本书的第三章 IO。
yksoft1
2018-12-11 08:03:30 +08:00
stdio.h 里面没有实现,实现都在 CRT 甚至系统调用里面。
mainlong
2018-12-11 19:59:16 +08:00
@pkookp8
@misaka19000
@KeepPro


看懂了,输出到文件和显示器都是一类,只是 fd 不一样。只是我把输出到显示器看成默认值(类似函数的默认参数这类的),然后在不同的场合(系统移植?)下,这个默认输出可能就不是显示器可以改成其他的。
pkookp8
2018-12-12 00:22:58 +08:00
@mainlong 0.1.2 这三个是约定俗成的,除非你魔改。
要改可以
1.console 驱动
2.内核 open 函数
3.应用层定义
但没必要,谁移植也不会改这个
mainlong
2019-06-04 22:16:40 +08:00
看到 python 的视频,发现和我想的不谋而合,默认输出是标准输出也就是终端窗口,也可以指定输出到其他文件 /流。

https://i.loli.net/2019/06/04/5cf67b737746873399.jpg


重定向又是另一个话题了。
在终端里敲命令,默认输出到终端窗口,如 grep >,把结果输出到另一个指定文件中去了。相当于 print 输出到指定文件了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/516320

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX