[英]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.