ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
Are there simple examples out there of handling of tgz files in c? Specifically, opening the file, list file contents (which files are included in the tgz) and extract a given file.
There will be two distinct stages to the process, once you've got to the point of opening the file. The first will be decompressing the file, which will probably involve the use of libz, as NevenTeve has already pointed out. Once the decompression has been done, unrolling the tarball can be done with relatively straightforward code. I've done it in Perl, and although I don't recall many details, I know that it wasn't hard to find the details online, and the actual code was straightforward. There are at least a couple of different tar formats, and the specific format used is embedded in a header in the tarball. I'm not sure if it is practical to unroll the compressed tarball into a data stream without using any additional temporary disk storage. Probably depends on the API exposed by zlib.
As pixellany points out, you can always do it with a system() call, but that's kind of cheating if you want to do it in C. Especially true if you want to stream the tar data into some other part of your application.
--- rod.
Oh, I think I got it.... till now.... the problem is that the file is a tgz and libtar will handle tar files. I have to decompress it first, I guess. Is there an easy trick to handle tgz files directly with libtar?
Oh, I think I got it.... till now.... the problem is that the file is a tgz and libtar will handle tar files. I have to decompress it first, I guess. Is there an easy trick to handle tgz files directly with libtar?
@OP: A little off-topic, you should copy the errno to a temp var, and not use it directly in eg strerror(errno). If something goes wrong with strerror itself, the errno will change so you will not get what you wanted.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.