How does a program get its path name?
Russell Kent
kent at tifsie.UUCP
Wed Feb 24 10:24:02 AEST 1988
in article <10106 at ulysses.homer.nj.att.com>, cjc at ulysses.homer.nj.att.com (Chris Calabrese[rs]) says:
>
> In article <2933 at sdsu.UUCP>, turtle at sdsu.UUCP writes:
>>
>> When a program executes, the full path to the executable file is kept in
>> the zero-th argument. If you have a declaration of main which looks like this:
>> main(argc,argv)
>> int argc;
>> char *argv[];
>>
>> then argv[0] is a pointer to the full path.
>> Is this what you were looking for?
>
> This is true only if the program was not found in the
> current working directory, in which case argv[0] will contain
> only the name of the program, not the full path. Of course,
> you can test to see if argv[0][0] != '/' and getcwd()
> to find the full path name.
>
> Christopher Calabrese
Unfortunately, neither of these statements is entirely correct. That
argv[0] contains any portion of the pathname of the process's executable
file is _merely_ convention on the part of _most_ shells (sh, rsh, csh, ksh,
and tcsh). It is perfectly ok to put your mother's maiden name in argv[0]
of a process you are about to exec, although this is obviously not very
useful.
The convention that _most_ shells follows is that argv[0] contains the
same text as the first blank-separated field of the command line after
any aliasing takes place. This means that:
Command Argv[0]
cc cc
/bin/cc /bin/cc
alias rm /bin/rm -i <internal command>
rm jack /bin/rm
\rm jill rm
The astute read may counter: "But if I do a /bin/cp with no parameters,
the computer comes back with "Usage: cp f1 f2" not "Usage: /bin/cp f1 f2".
This is because some programs intentionally use only the last portion of
the path given in argv[0] (using "argv0 = strrbrk (argv[0], '/');").
This convention is actually implemented in the shell through the use of
exec*p(); if you use execl() you can bypass it.
--
Russell Kent Phone: +1 214 995 3501
Texas Instruments UUCP address:
P.O. Box 655012 MS 3635 ...!convex!smu!tifsie!kent
Dallas, TX 75265 ...!ut-sally!im4u!ti-csl!tifsie!kent
More information about the Comp.unix.questions
mailing list