Search code examples
cgzipexecl

Forcing gzip to overwrite a .gz file in C


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?


Solution

  • 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.