int main(int argc, char* argv[]){
execlp("time", "time", NULL);
return 0;
}
然而,如果我给time添加一个参数,比如ls,它确实可以工作:
int main(int argc, char* argv[]){
execlp("time", "time", "ls", NULL);
return 0;
}
输出:
LICENCIA main.c msh parser.y prueba.c scanner.o y.tab.h
Makefile main.o parser.o prueba scanner.l tempCodeRunnerFile.c
0,00 real 0,00 user 0,00 sys
任何想法?
按预期工作。execlp("time", "time", NULL);
等价于执行/usr/bin/time
(假设这是它解析到的;它可能是不同的环境,与我的不同),并且执行/usr/bin/time
(同样在我的系统上,macOS 10.14.6)没有参数不会打印任何东西。我猜想time
实用程序的其他实现可以打印一条消息,表示没有给出时间命令和/或以错误代码退出。
相反,execlp("time", "time", "ls", NULL);
相当于执行/usr/bin/time ls
,在这种情况下,time
程序执行ls
并报告其时间。
在linux终端中,如果你输入time,它会显示shell和子进程的时间…
当您在命令行shell中输入time
时,它执行shell内置的time
函数,而不是系统的time
程序。要使用execlp
复制此操作,您必须使用execlp
而不是time
来启动shell,并且您必须传递shell参数以给它一个time
命令来执行。