2014-03-19 104 views
1

我对fprintf中'\ n'的作用感到困惑。我知道它将字符复制到一个数组中,\ n字符指示何时停止读取当前缓冲区中的字符。但是,它什么时候知道使系统调用写入。fprintf C中' n'的作用是什么?

例如,fprintf(标准输出,“你好”)打印,但我从来没有给出\ n字符,所以它如何知道进行系统调用。

+0

许多其他格式的代码?你很可能会查找一个实现。 –

+1

'\ n'标志着一行的结尾。使用行缓冲流时,系统可能会在达到'\ n'时刷新缓冲区,但这与'fprintf()'不直接相关。 – Dmitri

+0

如果您正在写入终端,则默认为行缓冲。所以\ n会让它刷新缓冲区。如果您正在写入文件,则会将其缓存。在这种情况下,\ n不会刷新缓冲区 – avmohan

回答

5

当频道同步/刷新时进行系统调用。这可能是缓冲区已满的时候(尝试写一个没有\n的LOT,你会在某个点看到输出),当看到一个\n(如果你为通道配置了行缓冲,这是tty设备的默认设置),或者打电话给fflush()

当路径关闭时,它也会被刷新。当进程终止时,操作系统将关闭它所有的开放路径。这些事件中的每一个都会导致系统调用发出输出。

+0

,但我不会调用fflush,因此它仍然会进行系统调用。 – user3213348

+1

@ user3213348我给出了如何进行调用的三个条件,但还有第四个条件:当通道关闭时,其缓冲区将被刷新。 – mah

+0

那么在程序结束时,stdout通道会自动关闭?就像之后没有更多的代码可以执行 – user3213348

0

首先,fprintf("hello");是不正确的,它应该是例如fprintf(stdout, "hello");。接下来,\ n并不意味着停止阅读或编写角色,因为\ n本身就是一个字符,换行符(10th in ascii table)。

0

的假设你说关于使用目的和\n是错误的。 \n只是255个ASCII字符中的一个,它们是读取,即它们不是命令或指令,导致发生任何事情,它们只是被动字符,当用于各种C函数(例如sprintf(), printf(),fprintf()等)被解释为使得输出的呈现被操纵为以期望的方式出现。

顺便说一句\n(新线)是在良好的公司,你可以看到代表HERE

您正在使用什么系统