-4

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

谢谢并恭祝安康。

4

2 回答 2

5

如果您尝试将 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
于 2015-11-24T20:12:36.430 回答
0

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

但是,在以下 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
于 2015-11-24T21:05:48.147 回答