06-27-2008
Quote:
Originally Posted by
shafi2all
Inside the C program, when execv(cPath, argv) is called, it launches new process image using "/bin/sh -c" option even if it is getting launched from C-shell. Is there a way to make execv to use "/bin/csh " or "/bin/sh"(without -c option)..
You are confusing the system function with the execv function, don't you? I mean, the execv function will replace the current process image with a new one. According to the execv man page (extracted from a Solaris box):
Quote:
Each of the functions in the exec family replaces the
current process image with a new process image. The new
image is constructed from a regular, executable file called
the new process image file. This file is either an execut-
able object file or a file of data for an interpreter. There
is no return from a successful call to one of these func-
tions because the calling process image is overlaid by the
new process image.
An interpreter file begins with a line of the form
#! pathname [arg]
where pathname is the path of the interpreter, and arg is an
optional argument. When an interpreter file is executed, the
system invokes the specified interpreter. The pathname
specified in the interpreter file is passed as arg0 to the
interpreter. If arg was specified in the interpreter file,
it is passed as arg1 to the interpreter. The remaining argu-
ments to the interpreter are arg0 through argn of the origi-
nally exec'd file. The interpreter named by pathname must
not be an interpreter file.
while the system function will execute the command string by calling the system's shell:
Quote:
system() executes a command specified in string by calling /bin/sh -c
string, and returns after the command has been completed. During exe-
cution of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT
will be ignored.
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
I need to take a string (stringA) check it for spaces and replace any spaces found with an equal (=) sign.
This is not working. There are spaces between each component:
$StringA | tr "" ""
The error returned is:
test: Specify a parameter with this command
Can you help? (3 Replies)
Discussion started by: by_tg
3 Replies
2. Red Hat
Friends ,
Anybody plz tell me what is the basic difference between "service" , "process" and " daemon" ?
Waiting for kind reply .. .. (1 Reply)
Discussion started by: shipon_97
1 Replies
3. Infrastructure Monitoring
I am trying to install net-snmp on an HPUX box. I am getting the fallowing error message when I try to run the snmpconf file. I installed the fallowing version of
net-snmp
net-snmp-5.0.10.2-HP-UX_B.11.11_9000_800.tar and my
HPUX box is version
HP-UX commnms B.11.11 U 9000/800... (2 Replies)
Discussion started by: krisarmstrong
2 Replies
4. Shell Programming and Scripting
In shell Programming, we know it should begin with "#! /bin/sh", it means use /bin/sh to interpreter the following command in the shell script.
But today I saw "#! /bin/sh -", it saied using "-" follow "#! /bin/sh " can avoid spoofing attack.
Anyone could explain that for me?
What is... (1 Reply)
Discussion started by: cqlouis
1 Replies
5. UNIX for Dummies Questions & Answers
what if the difference between
#!/bin/sh
and
#!/bin/bash
I wrote a script with the second heading now when i change my heading to the first one ...the script is not executing well....im not getting the required output....any solution to this problem...or do i have to start the... (3 Replies)
Discussion started by: xerox
3 Replies
6. Shell Programming and Scripting
Hi,
I have line in input file as below:
3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL
My expected output for line in the file must be :
"1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL"
Can someone... (7 Replies)
Discussion started by: shis100
7 Replies
7. Shell Programming and Scripting
there are two directories A and B
if cmd in in "A/user/bin A/bin A/user/sbin" but not "B/user/bin B/bin B/user/sbin" directory print them (1 Reply)
Discussion started by: yanglei_fage
1 Replies
8. UNIX for Dummies Questions & Answers
How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address
and column 3 contains “cc” e-mail address to include with same email.
Sample input file, email.txt
Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies
9. Shell Programming and Scripting
I'm on Ubuntu 14.04 and I manually updated my coreutils so that "tee" is now on version 8.27
I was running a script using bash where there is some write to pipe error at some point causing the tee command to exit abruptly while the script continues to run. The newer version of tee seems to prevent... (2 Replies)
Discussion started by: stompadon
2 Replies
10. Shell Programming and Scripting
Hello.
System : opensuse leap 42.3
I have a bash script that build a text file.
I would like the last command doing :
print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt
where :
print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies
EXEC(3) BSD Library Functions Manual EXEC(3)
NAME
execl, execlp, execle, exect, execv, execvp -- execute a file
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <unistd.h>
extern char **environ;
int
execl(const char *path, const char *arg, ...);
int
execlp(const char *file, const char *arg, ...);
int
execle(const char *path, const char *arg, ..., char *const envp[]);
int
exect(const char *path, char *const argv[], char *const envp[]);
int
execv(const char *path, char *const argv[]);
int
execvp(const char *file, char *const argv[]);
DESCRIPTION
The exec family of functions replaces the current process image with a new process image. The functions described in this manual page are
front-ends for the function execve(2). (See the manual page for execve(2) for detailed information about the replacement of the current
process. The script(7) manual page provides detailed information about the execution of interpreter scripts.)
The initial argument for these functions is the pathname of a file which is to be executed.
The const char *arg and subsequent ellipses in the execl(), execlp(), and execle() functions can be thought of as arg0, arg1, ..., argn.
Together they describe a list of one or more pointers to null-terminated strings that represent the argument list available to the executed
program. The first argument, by convention, should point to the file name associated with the file being executed. The list of arguments
must be terminated by a NULL pointer.
The exect(), execv(), and execvp() functions provide an array of pointers to null-terminated strings that represent the argument list avail-
able to the new program. The first argument, by convention, should point to the file name associated with the file being executed. The
array of pointers must be terminated by a NULL pointer.
The execle() and exect() functions also specify the environment of the executed process by following the NULL pointer that terminates the
list of arguments in the parameter list or the pointer to the argv array with an additional parameter. This additional parameter is an array
of pointers to null-terminated strings and must be terminated by a NULL pointer. The other functions take the environment for the new
process image from the external variable environ in the current process.
Some of these functions have special semantics.
The functions execlp() and execvp() will duplicate the actions of the shell in searching for an executable file if the specified file name
does not contain a slash ``/'' character. The search path is the path specified in the environment by the PATH variable. If this variable
isn't specified, _PATH_DEFPATH from <paths.h> is used instead, its value being: /usr/bin:/bin:/usr/pkg/bin:/usr/local/bin. In addition, cer-
tain errors are treated specially.
If permission is denied for a file (the attempted execve(2) returned EACCES), these functions will continue searching the rest of the search
path. If no other file is found, however, they will return with the global variable errno set to EACCES.
If the header of a file isn't recognized (the attempted execve(2) returned ENOEXEC), these functions will execute the shell with the path of
the file as its first argument. (If this attempt fails, no further searching is done.)
If the file is currently busy (the attempted execve(2) returned ETXTBUSY), these functions will sleep for several seconds, periodically re-
attempting to execute the file.
The function exect() executes a file with the program tracing facilities enabled (see ptrace(2)).
RETURN VALUES
If any of the exec functions returns, an error will have occurred. The return value is -1, and the global variable errno will be set to
indicate the error.
FILES
/bin/sh The shell.
ERRORS
execl(), execle(), execlp() and execvp() may fail and set errno for any of the errors specified for the library functions execve(2) and
malloc(3).
exect() and execv() may fail and set errno for any of the errors specified for the library function execve(2).
SEE ALSO
sh(1), execve(2), fork(2), ptrace(2), environ(7), script(7)
COMPATIBILITY
Historically, the default path for the execlp() and execvp() functions was ``:/bin:/usr/bin''. This was changed to improve security and be-
haviour.
The behavior of execlp() and execvp() when errors occur while attempting to execute the file is historic practice, but has not traditionally
been documented and is not specified by the POSIX standard.
Traditionally, the functions execlp() and execvp() ignored all errors except for the ones described above and ENOMEM and E2BIG, upon which
they returned. They now return if any error other than the ones described above occurs.
STANDARDS
execl(), execv(), execle(), execlp() and execvp() conform to ISO/IEC 9945-1:1990 (``POSIX.1'').
BSD
May 6, 2005 BSD