从 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 并为简洁起见省略了所有错误检查。
我需要在我的 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 并为简洁起见省略了所有错误检查。