不能在C中使用execl

时间:2015-11-24 20:01:31

标签: c execl

我正在尝试在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",

我还尝试了一些我在互联网上找到的验证示例,但他们也没有工作。 (我总是得到同样的错误)

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",'

谢谢和问候。

2 个答案:

答案 0 :(得分:5)

如果您尝试直接向shell输入C函数调用,则会出现错误消息:

[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

答案 1 :(得分:0)

在我的计算机上运行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