#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
#include "archive.h"
void Extract(ArchiveName *name)
{
pid_t pid;
char *buffer = "tar -xvzpf";
pid = fork();
if(pid < 0)
{
perror("fork failed");
exit(1);
}
if(pid == 0)
{
if(execlp(buffer, buffer, name->name, (char *)NULL) == -1)
{
fprintf(stderr, "\nexeclp failed : %s\n", strerror(errno));
}
exit(2);
kill(pid, SIGINT);
}
//system(str);
}
using execlp function call in linux
Hi
I am trying to call the tar command to extract a file from another app. But when I do I get the error that a file is not found. This is the code I currently have :-
What I am trying to achieve is tar -xvzpf filename . I a not sure where I am going wrong in the execlp command.
Thanks.
The more applications I write, more I find out how less I know
The first parameter should be just "tar", otherwise the system looks for a file named "tar -xvzpf".
Similarly, the second parameter should be just "-xvzpf", you should not repeat "tar".
So, basically: execlp("tar", "-xvzpf", filename, 0);
Similarly, the second parameter should be just "-xvzpf", you should not repeat "tar".
So, basically: execlp("tar", "-xvzpf", filename, 0);
"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." — Brian W. Kernighan
I tried that and I get an error :-
Does the "/" have any effect here - will it work like an escape sequence or like it should in a shell. I tried using -P no effect either.
Quote:
/home/username/directory/filename.tar.gz-xvzpf : old option g
requires an argument.
Try -xvzpf or --help for more information.
Does the "/" have any effect here - will it work like an escape sequence or like it should in a shell. I tried using -P no effect either.
The more applications I write, more I find out how less I know
arg0 was required [smile]
execlp("tar", "tar", "-xzvpf", filename, 0);
That works on my machine.
execlp("tar", "tar", "-xzvpf", filename, 0);
That works on my machine.
"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." — Brian W. Kernighan
September 12, 2004 02:41 AM
Quote: execlp("tar", "tar", "-xzvpf", filename, 0);
That works on my machine.
But it won't on a system where sizeof(int) isn't the same as sizeof(char*) (or where a null pointer isn't all-bits-zero, but that's rather less common to come across). Pass (char*)0 as the last argument or it'll break on 64 bit computers.
Hi,
It works when I use it in a command line app. But when I call it from a GTK app it seems to give the same error as I was getting on my previous post.
Is exec* not compatible with GTK ? Currently I am resorting to system(..) function.
It works when I use it in a command line app. But when I call it from a GTK app it seems to give the same error as I was getting on my previous post.
Is exec* not compatible with GTK ? Currently I am resorting to system(..) function.
The more applications I write, more I find out how less I know
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement