c - 如何以可移植的方式创建流程?

标签 c windows linux createprocess

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

是否可以以便携的方式进行?我必须为此目的使用预处理器吗?

编辑:我需要等待它完成才能继续执行操作。

最佳答案

在我看来,应该始终避免使用系统函数:它不可靠,因为您不知道哪个 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 中用于 bool 值的任何标志),该标志将触发 win32 部分的 WaitForSingleObject 和 waitpid POSIX 部分。

关于c - 如何以可移植的方式创建流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1703890/

相关文章:

c - 写入同一列(csv 文件)C

c - 多词搜索

windows - 批量复制和重命名文件

c++ - 从 catch block 中获取回溯

linux - 到处关闭用户的 zsh 补全

c - 在 C 中,为什么子进程不自动收割?

c - 在通过使用 16 位算术评估一个系列来计算 π 时避免溢出?

c++ - 使用 windows.h 和 WIN32_LEAN_AND_MEAN 时未定义时间

windows - 在 Windows 脚本中运行 ffmpeg 以缩小 MP3 文件时删除错误

linux - 在 unix/linux 系统上,如何了解有关 mylib.a 存档的更多信息?