fexecve не работает должным образом - PullRequest
1 голос
/ 06 августа 2020

, насколько я понимаю, fexecve похож на execve, за исключением того, что он принимает дескриптор файла вместо пути. Итак, вот мой код, который не работает: /

#define _DEFAULT_SOURCE
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>

int main() {
    int fd = open("test", O_RDONLY);
    printf("File : %d\n", fd)
    fexecve(fd, NULL, NULL);
}

, а вот test:

#include <stdlib.h>

int main() {
    system("mkdir pls");
}

есть идея?

1 Ответ

2 голосов
/ 06 августа 2020

Как указано в документации:

  Errors are as for execve(2), with the following additions:

  EINVAL fd is not a valid file descriptor, or argv is NULL, or envp is NULL.

Вы не можете передавать NULL для параметров. Вместо этого попробуйте что-нибудь вроде:

int
main(void) 
{
    int fd = open("test", O_RDONLY);
    char *env[] = { NULL };
    char *argv[] = { "test", NULL };
    fexecve(fd, argv, env);
    perror("fexecve");
    return EXIT_FAILURE;
}
...