从 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 compiler/runtime 环境提供它们):

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 );

正确 headers 并为简洁起见省略了所有错误检查。