我有一个向stdout写入大量数据的过程,我正在将其重定向到日志文件。我想通过不时地将当前文件复制到一个新名称并将其截断来限制文件的大小。
我通常的截断文件技巧,例如
cp /dev/null file
不起作用,大概是因为进程正在使用它。
有什么办法可以截断文件?还是将其删除,并以某种方式将流程的stdout与新文件相关联?
FWIW,这是第三方产品,我无法对其进行更改以更改其日志记录模型。
*通过文件进行 *EDIT 重定向似乎与上述副本具有相同的问题-下次将文件写入以下文件时,文件将恢复为先前的大小:
ls -l sample.log ; echo > sample.log ; ls -l sample.log ; sleep 10 ; ls -l sample.log
-rw-rw-r-- 1 user group 1291999 Jun 11 2009 sample.log
-rw-rw-r-- 1 user group 1 Jun 11 2009 sample.log
-rw-rw-r-- 1 user group 1292311 Jun 11 2009 sample.log
看一下该实用程序split(1)
,它是GNU Coreutils的一部分。
问题内容: 在Java中截断文件的最佳实践方法是什么?例如,此虚拟函数仅作为示例来阐明其意图: 由于该文件充当占位符,因此无法将其删除。 问题答案: 使用FileChannel.truncate:
做 截断如果它已经存在?令人惊讶的是,Java的API留档没有说。API也不会留档Java7。语言本身的规范对类的语义学没有什么可说的。 我知道 导致附加到文件。但附加和截断并不是唯一的可能性。如果将100个字节写入1000字节的文件,一种可能性是最后900个字节保持原样。
当我的程序试图从XML配置文件中读取时,我收到以下错误: org.xml.sax.SAXParseException;systemId:file:/home/sara/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/poseidonwebservicewar_v12/config.xml;行号:74;
虽然我对Objective-C开发很熟悉,但当涉及错误解释时,我仍然认为自己有点像n00b。我在申请别人也在做的工作。我相信我们可能有不同版本的Xcode,一个开发者有一台PC(其他人和我有一台MacBook)。我使用的是Xcode 4.5.1。 问题所在 Apple clang版本4.1(Tags/Apple/Clang-421.11.66)(基于LLVM 3.1 SVN)目标:i386-App
问题内容: 截断->这将重置整个表,是否可以通过截断来重置特定的记录/检查条件。 例如:我想重置所有数据并在表中保留过去30天。 谢谢。 问题答案: 不,是全部还是全部。您可以这样做,但这会失去的速度优势。
拦截文件 bp CreateFileA 创建或打开文件 (32位) bp OpenFile 打开文件 (32位) bp ReadFile 读文件 (32位) bp WriteFile 写文件 (32位) bp GetPrivateProfileStringA (ini文件)