fwriteprimefaces?

一个简单的问题:

我需要在我的程序中添加一些日志记录。

如果两个进程在同一个文件上使用“fwrite”但文件描述符不同,那么写入的日志消息将是primefaces的或混合的。 有长度限制吗?

是否定义了ANSI-C行为或实现定义? 如果后来MacOSX,Linux和Windows MSVC上有什么?

它可以混合使用。

如果有多个线程/进程写入同一文件,则需要使用锁定。

另一种方法是将日志消息发送到专用服务/线程。 一个很好的工具是syslog ,它肯定安装在所有unix上,可以在Windows上运行。

做了一些研究后,我在这个链接中找到了以下内容:

POSIX标准要求C stdio FILE *操作是primefaces的。 符合POSIX的C库(例如,在Solaris和GNU / Linux上)具有内部互斥锁,用于序列化FILE *上的操作。

看起来调用应该是primefaces的,但这取决于您的平台。 在同一个链接中,还有另一段让你认为程序员应该注意:

因此,对于3.0,“multithreading安全I / O”的问题必须回答,“您的平台的C库线程是否适用于I / O?” 有些是默认的,有些则不是; 许多提供C库的多个实现,具有不同的线程安全性和效率。 作为程序员,您始终需要注意多个线程。

此外,由于您在两个不同的流程中有两个不同的FILE* ,我认为您别无选择。

从Debian lenny上的“man flockfile”开始,stdio函数是线程安全的。

有线程不安全的stdio函数,“man unlocked_stdio”了解更多细节。

您可以从手册页获取更多信息。

Visual Studio的fwrite锁定调用线程,因此是线程安全的