繁体   English   中英

从system()更改为exec(),这会加快我的代码速度吗?

[英]Changing from system() to exec(), does it speed up my code?

我需要在我的C代码中执行一些Linux命令行,所以我选择使用system() 不幸的是,它放置在while(1) ,也许会使我的程序变慢。 如果使用exec()系列,它会改善吗? 如果是,您能告诉我如何将此行从system()转换为exec()?

while(1) {
........
system("echo \"x = 800 , y = 480 , swap = swap_32_16\"> /sys/bus/platform/drivers/display/layer0");
........
}

谢谢

exec*等价于

system("echo \"x = 800 , y = 480 , swap = swap_32_16\">"
       "/sys/bus/platform/drivers/display/layer0");

就像

execl("/bin/sh", "/bin/sh", "-c", "echo \"x = 800 , y = 480,"
      " swap = swap_32_16\">/sys/bus/platform/drivers/display/layer0", (char*)NULL);

问题是,它是完全一样的命令, system将执行(在新分叉子),只有更打字。 并且由于exec 新执行的程序替换了当前进程,因此exec调用将是您的程序执行的最后一个调用,除非您首先fork()进程...并处理失败,然后...等待完成。子流程等


真正的解决方案当然是根本不使用外部命令,只需在C中执行此操作即可:

FILE *f = fopen("/sys/bus/platform/drivers/display/layer0", "w");
if (!f) { 
    // ... could not open ... 
}
fputs("x = 800 , y = 480 , swap = swap_32_16\n", f);
fclose(f);

或者,您可以使用POSIX open() / write() / close()获得更少的开销(假设您的C编译器/运行时环境提供了它们):

static char data[] = "x = 800 , y = 480 , swap = swap_32_16\n";
int fd = open( "/sys/bus/platform/drivers/display/layer0", O_WRONLY );
write( fd, data, strlen( data ) );
close( fd );

为了简洁起见,省略了正确的标题和所有错误检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM