不能在 C 中使用 execl

Can't use execl in C

我试图在 C 程序中执行这个 execl 命令,但它根本不起作用。

execl("~/Desktop/taskc/validating/analyzer/numbers_analyzer", "numbers_analyzer", (char*)NULL);

bash: syntax error near unexpected token `"~/Desktop/taskc/validating/analyzer/numbers_analyzer",

我还尝试了一些我在 Internet 上找到的验证示例,但它们也不起作用。 (我总是遇到同样的错误)

execl( "/bin/ls", "/bin/ls", argv[1], NULL );
bash: syntax error near unexpected token `"/bin/ls",'

execl("/bin/date", "date", 0, 0);
bash: syntax error near unexpected token `"/bin/date",'

感谢和问候。

您收到的错误消息是如果您尝试将 C 函数调用直接输入 shell:

[dbush] execl("/bin/date", "date", 0, 0);
-bash: syntax error near unexpected token `"/bin/date",'
[dbush]

您需要将代码放入实际的 C 程序中,编译它,然后 运行 它:

#include <stdio.h>
#include <unistd.h>

int main()
{
    // the last argument should be a NULL pointer to signal the end of the arg list
    execl("/bin/date", "date", NULL);
}

输出:

[dbush] gcc  -g -o /tmp/x1 /tmp/x1.c
[dbush] /tmp/x1
Tue Nov 24 20:11:54 UTC 2015

在我的电脑上,运行ning ubuntu linux 14.04,使用bash作为命令shell,这个命令不能运行 从命令行。

但是,在下面的 C 程序中,它可以正常工作:

#define _POSIX_C_SOURCE  200112L
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


int main( void )
{
    pid_t pid = fork();
    if( 0> pid)
    { // then, error
        perror("fork failed");
        exit( EXIT_FAILURE );
    }

    if( !pid )
    { // child
        execl( "/bin/ls", "/bin/ls", NULL, NULL );
        perror( "execl failed" );
        exit( EXIT_FAILURE );
    }

    printf( "parent running after successful fork\n");
    return 0;
}

给出如下所示的输出:

注意:我运行来自终端的程序

在以下输出中,我从 'ls' 命令中删除了大部分文件列表。

parent running after successful fork
a.out              howToCalcPrimeNumbers(works)    tellwait.c
bashloop.sh        howToCalcPrimeNumbers(works).c  tellwait.h
cards.h            howToCalcPrimeNumbers(works).o  tellwait.h.gch
cards.h.gch        input.txt               tellwait.o
cent_convert.c         libSensors.h            test