Forcing gzip to overwrite a .gz file in C

657 views Asked by At

I am having a bit of trouble using gzip to compress a file from a C program. I am using this line of code execl("/usr/bin/gzip", "-f", filePath, NULL); to compress the file given by filePath. It works fine the first time (i.e. when there is no existing .gz file), but in subsequent executions of the program I am prompted whether or not I would like to overwrite the existing .gz file.

Am I using execl() incorrectly, because I am pretty sure that the -f switch forces gzip to overwrite without a prompt?

1

There are 1 answers

2
hyde On BEST ANSWER

You need to provide argv[0] too. So, like this:

execl("/usr/bin/gzip",
      "gzip", "-f", filePath,
      NULL); 

In your code, you set argv[0] to be "-f", so it is essentially ignored.

Gzip is one of the few programs where argument 0 actually matters, as gzip and gunzip are usually (at least on Unixy systems) a symbolic link to the same binary, and argument 0 is used to determine the default mode. If your "-f" worked, it means gzip is default.