我想更改Linux系统的时区。我知道有很多方法。 一种方法是使用 tzset()功能,另一种方法是调用' timedatectl '命令来自' popen()'功能。 我正在使用第二种方法,即使用" popen()"。
我只想问使用" popen()"这是一个很好的编程习惯吗?在您的代码中?
另外,我正在小心地打电话给#34; pclose()"每个" popen()"。
答案 0 :(得分:0)
popen()
调用shell来运行命令,这是一个额外不必要的间接层。此外,还存在各种安全隐患,例如,您无法控制环境 - 或实际调用哪个shell。
我说它适用于原型和概念证明,但对于生产代码,您应该使用fork()
,IO的执行和管道之一。
修改强>
如果通过调用命令存在与doinf等效的函数,请始终先使用该函数。例如,如果您可以使用tzset()
实现所需的目标,请始终优先使用它来生成新流程。
答案 1 :(得分:0)
一般来说popen
没有错,如果你真的需要一个子进程为你做一个特定的工作。
popen
创建一个管道,允许您读取子进程的输出(写入stdout的内容)或将输入写入其stdin - 但不能同时写入两者。
如果您对这两个选项都不感兴趣,您可能更愿意调用system
(但是,system
将等待进程终止,与popen相反 - pclose等待)。< / p>
但是,如果你可以通过简单地调用普通函数(系统调用与否)来完成相同的工作,那么为什么要创建一个单独的进程呢?您正在使用进程创建大量开销(进程必须初始化并挂钩到操作系统,它需要自己的内存用于可执行代码,堆和堆栈,......)!
如果有问题的工作需要相当长的时间并且您无法等待功能完成,它会变得有点复杂,但需要来做其他事情。但是,在这种情况下,我只是创建一个线程,然后再从那里调用该函数...