简体   繁体   中英

Difficulty in using execve

I am trying to execute "word count" command on file given by absolute path - "/home/aaa/xxzz.txt" . I have closed the stdin so as to take input from file but the program doesn't give any output . Also if I add some statement after "execve" command, it is also getting executed . Shouldn't the program exit after execve ?

 int main()
    {
char *envp[]={NULL };

int fd=open("/home/aaa/xxzz.txt",O_RDONLY);

close(0);
dup(fd);

char *param[]={ "/bin/wc",NULL } ;
execve("/bin/wc",param,envp);

}

Probably wc does not live in /bin (except for some systems which symlink that to /usr/bin , because wc normally lives in the latter). If I change the path in your example to /usr/bin/wc , it works for me:

#include <unistd.h>
#include <fcntl.h>

int
main()
{
    char *envp[] = {NULL};

    int fd = open("/home/aaa/xxzz.txt", O_RDONLY);

    close(0);
    dup(fd);

    char *program = "/usr/bin/wc";
    char *param[] = {program,NULL};
    execve(program, param, envp);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM