![](/img/trans.png)
[英]How to keep stream position when using gzstream with gzipped file?
[英]Write gzipped file using gzip
有一个函数使用FILE*
来序列化对象。
另外,我想以gzip格式序列化对象。
为此,我尝试这样做:
boost::shared_ptr<FILE>
openForWriting(const std::string& fileName)
{
boost::shared_ptr<FILE> f(popen(("gzip > " + fileName).c_str(), "wb"), pclose);
return f;
}
boost::shared_ptr<FILE> f = openForWriting(path);
serilizeUsingFILE(f.get());
但是这种方法导致了段错误。
您能帮我了解段错误的原因吗?
你有几个问题。
首先,如果将pclose传递为NULL,它将关闭segfault。 因此,在构造shared_ptr之前,需要测试popen中的null。
其次,popen不会将“ b”作为标志,因此类型字符串应仅为“ w”。
boost::shared_ptr<FILE>
openForWriting(const std::string& fileName)
{
FILE *g = popen(("gzip >" + fileName).c_str(), "w");
if (!g)
return boost::shared_ptr<FILE>();
boost::shared_ptr<FILE> f(g, pclose);
return f;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.