基本上,我想使用gzip在pthread线程中压缩文件。 在脑海中和Google上出现的第一个解决方案是调用system()。
stackoverflow社区有何建议?
我应该在pthread中使用system()吗?
还是我自己应该在pthread中分叉并执行?但是,由于pthread是线程,是否建议在pthread线程中进行fork()和exec()?
或者什么是比上述更好的方法?
答案 0 :(得分:2)
从另一个线程中的system
调用开始,仅在需要时增加复杂性。
仅当fork
由于某些原因(例如,您想将子进程的exec
和zip
都重定向到您的父进程,或者您想压缩内存中的文件以通过网络发送它而无需写入新文件)。
答案 1 :(得分:2)
您不应为此使用system
,但不要这样做,因为它很昂贵。 (对于任何值得压缩的文件, any 调用背景gzip压缩的技术开销相对于压缩本身的成本而言是可以忽略的。)不应使用{ {1}}是system
调用外壳程序,这意味着您必须担心引用参数。如果您改用system
和fork
,则不必担心引用任何内容。
与execvp
和fork
与线程混合相关的问题是真实的,但是很容易解决。如果您的操作系统有wait
,它将为您解决其中的一些问题。我通常不建议使用posix_spawn
,因为使用它的代码通常比使用posix_spawn
的代码更难维护,但是对于此应用程序来说应该可以。我不适合将fork
和fork
与线程混合到此答案框中的全面指南。
您应该考虑的替代方法是使用zlib在等待wait
进程的线程中压缩数据。这样可以避免将gzip
和fork
与线程混合的问题,但是它为您的程序增加了库依赖,这可能不像依赖外部wait
可执行文件那样方便。