exec question
Hello,
How can I execute a program (without the full path, just the name) using exec's system calls within a C program? ej: buf[]={"uname",NULL};
Thanks for a brief example,
ework0
A message that is not in the archive (sent off-list or not yet received): 1131083883.10404.3.camel@mokona
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoting ework0 <[email protected]>:
Quoted 19 lines
Quoted 6 lines · David Eduardo Gómez Noguera
Quoted 3 lines · On Thu, 2005-11-03 at 23:09 -0600, ework0 wrote:
Hello,
How can I execute a program (without the full path, just the name)
using
Quoted 10 lines
Quoted 9 lines
exec's system calls within a C program? ej: buf[]={"uname",NULL};
Thanks for a brief example,
ework0
Quoted 9 lines
Quoted 6 lines
I think not, not with exec's family of functions anyway. You could try system though, or popen or some other way, but its a bit risky to call programs without the full path.
are you sure DAVID!!! ???? I cant use
system()orpopen()is unsecure!
The reason you can avoid a full path with system and popen is because they first spawn a shell and then have the shell execute the program.
The shell first looks for the program in the PATH env variable.
Also to use exec you probably want to fork() first.
But then again, what does that buff variable is for? if it's ARGV, then its right to have the name for the program only, but the filename argument still needs to include the full path
i.e.
execv("/bin/uname", buff);
would execute /bin/uname, and if it happened to read it's first parameter (argv[0]) it would find the string "uname"
there would also be no more parameters (argc == 1)
-------------------------------------------------
www.correo.unam.mx
UNAMonos Comunicándonos
-
To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
I believe this is what you want, right?
In the future, you will get a much more expedient response by posting to the newsgroup, comp.unix.programmer. :) Just an FYI .. not trying to scare you away.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
intmain(int argc, char *argv[])
{
/* In using execlp you better be sure PATH is set properly and
* also in ceratin situations it might be a security risk.
*/
/* Uncomment below if you want an example with arguments */
//if (execlp("cat", "cat", "/etc/hosts", (char *)0) < 0)
if (execlp("df", "df", (char *)NULL) < 0)
fprintf(stderr, "\nCannot exec!\n");
exit(0);
}Quoted 16 lines · ework0 wrote:
Hello,
How can I execute a program (without the full path, just the name) using exec's system calls within a C program? ej: buf[]={"uname",NULL};
Thanks for a brief example,
ework0
-
To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html