gpt4 book ai didi

c - 使用 system() 通过外部程序创建的文件与通过 open() 打开它之间需要延迟吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:28 26 4
gpt4 key购买 nike

我正在尝试从我的程序创建一个 TAR 存档,然后打开存档以进行进一步处理。我在调用 system()open() 之间有 2 秒的延迟。到目前为止,它工作正常,但我不确定为什么需要 2 秒延迟或者它是否是正确的解决方案。

没有延迟,我从 open() 调用中得到错误代码 2(ENOENT“没有这样的文件或目录”)。我的第一个想法是文件系统自身更新速度不够快,open() 找不到文件。但是,如果系统真的很忙怎么办?我需要更长的延迟吗?我应该循环直到 open() 成功而不是延迟吗?问题完全不同吗?

更新
根文件系统是 EXT2。 /tmp 使用 TMPFS 挂载在 RAM 中。我正在使用 tar创建 存档,而不是提取其中的内容。本质上,我的程序应该创建一些日志文件的存档并通过网络发送它们(这就是我在创建存档后打开存档的原因)。

int return_value = system("/bin/tar -czf /tmp/logs.tar.gz /var/log/mylogs.log* &> /dev/null");
// error checks on return_value as described here: http://linux.die.net/man/2/wait
if(return_value != 0) {
return return_value;
}
//usleep(2000000);
return_value = open("/tmp/logs.tar.gz", O_RDONLY | O_LARGEFILE, 0);
// success or failure depending on whether there's a delay or not

最佳答案

您甚至可以使用 libtar 避免运行外部 tar 命令直接在您的程序中。


已添加

您应该向我们展示您的程序。我很确定,如果对 system 的调用只是通过 tar 提取了一些文件,它在 成功 system 之后可用 调用,例如像这样的东西:

 int err = system("/bin/tar xf /tmp/foo.tar bar");
int fd = -1;
if (err == 0)
fd = open("bar", O_RDONLY);
// fd is available

没有理由在这段代码中等待几秒钟。您可能正在做更复杂的事情,或者您忘记了测试 system

的结果

关于c - 使用 system() 通过外部程序创建的文件与通过 open() 打开它之间需要延迟吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8566382/

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