等待解压完成后再进行 C++ RedHat 机器上的代码

发布于 2024-11-28 14:20:10 字数 490 浏览 2 评论 0原文

我想在我的 Redhat 机器上解压一个压缩文件夹。

为此,我向 bash 脚本发送字符串;

"unzip /usr/bin/Folder.gz"

这解压缩文件夹没有问题,就像我得到一般

inflating folderA/folderB/fileX

等一样。


但是,我想将代码保存在解压缩命令中,等待解压缩完成。

我尝试过使用,

sleep(5)

但我不想使用它,只是希望它总是需要不到五秒的时间,尤其是对于非常小的压缩文件来说,这效率很低。

我在网上搜索过但无济于事......

所以我的问题是;在解压缩完成之前停止程序的可靠方法是什么?


操作系统:Redhat

编程语言:C++

IDE:Eclipse

I want to unzip a zipped folder on my Redhat machine.

To do this I send a bash script the string;

"unzip /usr/bin/Folder.gz"

This unzips the folder no problem, as in I get the general

inflating folderA/folderB/fileX

etc.


However, I want to hold the code at the unzip command, waiting until the unzipping is complete.

I have tried using

sleep(5)

but I don’t want to use this and just hope that it will always take less than five seconds especially this is would be inefficient for very small zipped files.

I have searched online but to no avail...

So my question is; what is a reliable way to stall a program until the unzipping is complete?


O/S: Redhat

Programming Language: C++

IDE: Eclipse

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

慈悲佛祖 2024-12-05 14:20:10

如何运行 bash 脚本?

如果您使用system() API,它将启动程序,然后等待生成的进程结束。

system() system 是由另外 3 个系统调用组成的调用:execl()、wait() 和 fork()。 来源

How do you run the bash script?

If you use the system() API it will start the program and then wait until the spawned process ends.

system() system is a call that is made up of 3 other system calls: execl(), wait() and fork(). Source.

抠脚大汉 2024-12-05 14:20:10

Try:

unzip /usr/bin/Folder.gz &
wait $!

这将导致 shell 等待最后一个进程完成。最后执行的命令的 pid 存储在 $! 中。

不确定这与 C++ 有何关系,但如果您想从代码中执行相同的操作,可以使用 waitpid 函数。

当然,如果您希望程序在 unzip 执行时阻塞,我对确切的问题是什么感到有点困惑。假设您使用 system 或类似的东西来运行 unzip,它应该会阻塞,直到命令完成。

Try:

unzip /usr/bin/Folder.gz &
wait $!

That will cause the shell to wait on the completion of the last process. The pid of the last executed command is stored in $!.

Not sure how this relates to C++, but if you want to do the same from code you can use the waitpid function.

Of course, if you want your program to block while unzip executes I'm a little confused as to what the exact problem is. Assuming you're using system or some equivalent to run unzip, it should block until the command completes.

遗失的美好 2024-12-05 14:20:10

我不太确定这是最好的方法,但它是可靠的。
现在,只需将命令发送到 bash,为什么不将输出发送到某个文件呢?

unzip /usr/bin/Folder.gz > output.txt

一旦找到 100% 或输出的最后一行应包含的内容,请定期从 C++ 代码中读取文件(假设 1 秒),然后继续执行代码。

I'm not really sure this is the best way, but it is reliable.
Now instead just sending the command to the bash why not send the output to some file.

unzip /usr/bin/Folder.gz > output.txt

Read the file in regular intervals from your C++ code (lets say 1 sec) once you find 100% or whatever the last line of the output should contain and then carry on with your code.

ヅ她的身影、若隐若现 2024-12-05 14:20:10

我不知道这是否会过度杀伤或效率低下,但您可以将解压缩过程移至另一个线程,并停止主线程,直到该线程完成处理

I don't know if this would be overkill or inefficent, but you could move the process of unzipping in to another thread, and halt your main thread until that thread is finished processing

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文