gpt4 book ai didi

c - 将在打开时清除文件内容导致错误 C

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:48 25 4
gpt4 key购买 nike

我有一个 c 程序正在记录到文件 /var/log/test.log

我有一个单独的线程,它将读取文件的内容并通过 http post 将它们提交到我的服务器。这大约每小时发生一次。我的问题是从该线程清除文件的内容(例如 fclose(fopen("/var/log/test.log", "w"))会导致主线程中出现任何错误那实际上是将数据写入文件?

如果这确实会导致错误,最好的选择是什么?每次将数据发送到服务器时,都应清除(而不是删除)该文件。

我认为这不重要,但我运行的是 OS X 10.9

最佳答案

My question is will clearing the contents of the file from that thread (eg. fclose(fopen("/var/log/test.log", "w")) cause any errors in the main thread that is actually writing data to the file?

不要认为它在一般情况下会起作用,并且取决于您写入文件的方式(您是打开它进行写入还是关闭它?)- 您可能会遇到一些令人讨厌的竞争条件。即使它今天对您有用,您也不知道明天或在其他操作系统上会发生什么。

If this does cause an error what is the best alternative? The file should be cleared (but not deleted) every time the data is sent to the server.

最好让一个线程写入一个文件。您可以让您的发送线程通知日志记录线程它已经发送了一些数据。例如,通过将一些索引写入共享变量或将某些内容放入共享同步队列中。写入线程将定期(比如每 100 次日志写入)检查发送的内容并采取相应行动。这更具可扩展性,并且允许您有多个线程请求以适当的方式对日志文件执行操作。

关于c - 将在打开时清除文件内容导致错误 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21351592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com