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
你知道吗?
1条答案
按热度按时间ecbunoof1#
execlp("time", "time", NULL);
等效于执行/usr/bin/time
(假设它解析为x1m1 n1.;它可能是与我不同的环境),并且在没有参数的情况下执行/usr/bin/time
(同样在我的系统上,macOS 10. 14. 6)不会打印任何东西。我想time
实用程序的其他实现可能会打印一条消息,说明没有给出要计时的命令和/或退出并显示错误代码。相比之下,
execlp("time", "time", "ls", NULL);
等效于执行/usr/bin/time ls
,在这种情况下,time
程序执行ls
并报告其时间。在Linux终端中,如果你输入时间,它会显示 shell 和子进程的时间...
当您在命令行shell中键入
time
时,它会执行shell的内置time
函数,而不是系统time
程序。要使用execlp
重现此情况,必须使用execlp
而不是time
启动shell,并且必须传递shell参数以向其提供要执行的time
命令。