我正在尝试编写一个需要创建其他进程的程序。我已经习惯了Windows API,但现在我需要我的程序才能在Linux平台上运行。
是否可以以便携方式进行?我是否必须为此目的使用预处理器?
编辑:我需要等待它完成才能继续做。
答案 0 :(得分:3)
在我看来,应该始终避免使用系统函数:它不可靠,因为你不知道shell将处理你的命令,而且它没有办法让你返回一个明确的错误代码。此外,在Windows等平台上,进程非常重要,启动新进程只是为了启动另一个进程并不是一个好主意,顺便说一下,某些安全套件可能会为您的应用尝试启动的每个进程发出警告,并且将此通知加倍(一个用于命令解释器,一个用于实际启动的应用程序)可能会使用户倍感烦恼。
如果您只需要创建一个新进程,您可以围绕实际的特定于平台的代码创建包装函数,该代码将在编译程序时自动选择,这要归功于预处理程序。像这样:
int CreateProcess(const char * Executable, const char * CommandLine)
{
#if defined (_WIN32)
return CreateProcess(Executable, CommandLine /* blah blah blah */)!=FALSE;
#elif defined (_POSIX)
/* put here all the usual fork+exec stuff */
#else
#error The CreateProcess function is not defined for the current platform.
#endif
}
顺便说一句,该函数可以很容易地扩展为阻塞,你可以简单地添加一个标志(int Blocking,或者现在在C99中用于布尔值的任何东西),它将触发win32部分和waitpid的WaitForSingleObject。对于POSIX部分。
答案 1 :(得分:1)
API是不同的,因此无法编写两段代码或链接到执行相同操作的库。
Apache Portable Runtime是用C语言编写可移植低级程序的好选择。
答案 2 :(得分:0)
尝试在Posix和Windows上都存在的system()。
@Jeff - system()是一个阻塞调用,在子进程退出之前不会返回。
答案 3 :(得分:0)
您需要对其他线程有多少控制权?如果只是启动它们很简单,那么system()
函数可能是一个很好的选择。如果你想要更多地控制它们,我会查看一个库。我知道Qt使得进行多进程编程的某些方面变得相当容易。