C 程序以奇怪的顺序执行

C 程序以奇怪的顺序执行,c,linux,C,Linux,为什么是奇怪的顺序 另外,perror返回“无效参数”作为错误。在同一个文件上使用freopen安全吗?我在Mac OS X 10.10.1和GCC 4.9.1上得到的输出是: 2: Undefined error: 0 4: Undefined error: 0 6: Undefined error: 0 1 3 5 序列是这样的,因为标准错误不被缓冲,标准输出被缓冲 获取错误EINVAL(无效参数)的原因可能有很多。除非freopen()返回错误指示,否则您没有理由检查errno中的值;库

为什么是奇怪的顺序


另外,
perror
返回“无效参数”作为错误。在同一个文件上使用
freopen
安全吗?

我在Mac OS X 10.10.1和GCC 4.9.1上得到的输出是:

2: Undefined error: 0
4: Undefined error: 0
6: Undefined error: 0
1
3
5
序列是这样的,因为标准错误不被缓冲,标准输出被缓冲

获取错误EINVAL(无效参数)的原因可能有很多。除非
freopen()
返回错误指示,否则您没有理由检查
errno
中的值;库函数即使成功,也可以设置
errno
。(例如,在Solaris上,即使操作成功,当输出到终端以外的对象时,许多输出操作都会将
errno
设置为ENOTTY,而不是tty。)

请注意,在使用流之前,您应该严格检查返回值from是否不为NULL。如果文件无法创建、不可写或是目录等,调用可能会失败

为了回答你的问题:

在同一个文件上使用freopen安全吗


这取决于你对“安全”的定义。你的电脑会爆炸吗?不,不仅仅是因为这个。
freopen()
第二次尝试会失败吗?不,没有。你能得到有趣的数据交错效果吗?当然可以。标准输出块不一定以换行结束,可以很容易地与标准错误行交错。你会经常这样做吗?不,你不会经常这样做。如果这样做,您可能希望在调用
freopen()
之后立即将标准输出和标准错误设置为line buffered with。这将减少看似奇怪的输出量。

您的问题是什么?猜测问题的格式错误,他需要知道的是“在同一文件上使用freopen是否安全?”请包括问题中的所有信息,包括您希望解释的输出。回答者不必对您的问题进行反向工程。:-)
2: Undefined error: 0
4: Undefined error: 0
6: Undefined error: 0
1
3
5
2: Undefined error: 0
4: Undefined error: 0
6: Undefined error: 0
1
3
5