我在那里,几乎要再次向分包商发送一封愤怒的邮件。他们使用Post
而不是...
$comment = new Comment();
$form = $this->createForm(CommentType::class, $comment);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$comment->setUser($this->getUser());
$em->persist($comment);
$em->flush();
}
报告错误,我认为这是愚蠢的,因为printf(...)
被(行)缓冲了。尤其是当我在一个断言处理程序中找到其中的一张照片时(可能以fprintf(stderr, ...)
结尾,它不会刷新打开的文件)。
但是仔细看所有的印刷品,所有印刷品都以换行符结尾。而且由于stdout
是行缓冲的(默认情况下),所以我想:同花顺是否有区别?
答案 0 :(得分:1)
的确,如果流被行缓冲并且所有输出都以换行符结尾,那么为了确保输出不被延迟并且不因异常终止而不会丢失输出,行缓冲同样有效因为没有缓冲。 (如果在需要的地方连续使用fflush
,则可以做出类似的陈述。)
但是,您所做的以及您所依赖的语句“ stdout
是行缓冲的(默认情况下)”是错误的。相反,除了stderr
以外,所有stdio文件默认情况下仅在连接到交互式设备时才被行缓冲(或可能没有缓冲)(tty)。否则它们将被完全缓冲。
每个7.21.3 文件,¶7(重点是我的):
在程序启动时,预定义了三个文本流,无需显式打开它们-标准输入(用于读取常规输入),标准输出(用于写入常规输出)和标准错误(用于写入诊断输出)。最初打开时,标准错误流未完全缓冲;当且仅当可以确定流不引用交互式设备时,标准输入流和标准输出流才被完全缓冲。
和7.21.5.3 fopen
函数,¶8:
打开后,当且仅当可以确定不引用交互式设备时,流才会完全缓冲。流的错误和文件结束指示符已清除。
答案 1 :(得分:0)
以换行符结尾时,行缓冲的文件和未缓冲的文件之间是否有区别?
同花顺有什么区别吗?
鉴于 flush 是“任何未写入的缓冲区内容都将传输到主机环境” C11dr§7.21.34
如果所有stdout
输出都以'\n'
结尾,并且该流是 unbuffered 或 line buffered ,则随后的刷新不会可以做任何事情,因为没有未写入的数据。
C规范在这里有点松散。详细行为是定义的实现。最好使用fflush(stdout);
以确保到那时为止已清除输出。 More info。