我怎样才能以便携的方式创build一个stream程?

我正在尝试编写一个需要创build其他进程的程序。 我已经习惯了Windows API,但现在我需要我的程序能够在Linux平台上运行。

是否有可能以便携式的方式做到这一点? 为了这个目的,我必须使用预处理器吗?

编辑:我需要等待它完成之前继续做事情。

Solutions Collecting From Web of "我怎样才能以便携的方式创build一个stream程?"

在我看来,应该总是避免使用系统函数:这是不可靠的,因为你不知道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部分的WaitForSingleObject和POSIX的waitpid部分。

API是不同的,所以没有办法编写两段代码或链接到相同的库。

Apache便携式运行时是在C编写便携式低级程序的一个很好的选择。

你需要多少控制其他线程? 如果只是简单地启动它们,那么system()函数可能是一个很好的选择。 如果你想更多的控制他们,我会看看一个图书馆。 我知道Qt使得多进程编程的某些方面变得相当容易。

尝试system(),因为它存在于Posix和Windows上。

@Jeff – system()是一个阻塞调用,直到子进程退出才会返回。