多进程编程函数posix_spawn实例

 #include <spawn.h>
 int posix_spawn(pid_t *restrict pid, const char *restrict path,
        const posix_spawn_file_actions_t *file_actions,
        const posix_spawnattr_t *restrict attrp,
        char *const argv[restrict], char *const envp[restrict]);

  在main函数中调用该函数可以将一个可执行文件运行起来;如下面所示:
posix_spawn(&child_pid, "ls", NULL, NULL, argv, NULL);
执行完该函数之后,会将该目录下的ls可执行程序运行起来,会输出该目录下的文件;
argv参数可有可无,在例子中,如果没有带参数,那么直接执行ls;也可以带上参数-l,那么直接执行ls -l,则以列表的形式显示该目录下的文件;
在第二个例子中,参数是test.txt,那么对于第一个进程,则执行 ls test.txt,则输出test.txt;对于第二个进程,则执行cat test.txt输出test.txt的内容;

在例子二中吊起了两个可执行文件ls 和 cat(这两个文件是我从/bin目录下直接拷贝过来的,也可以自己生成一个可执行文件,只是这里我太懒了。。。。。)

wait(&wait_val);

刚才运行的进程的返回值输入到wait_val中;(感觉我例子二中有一点问题,第一个wait

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`posix_spawn` 函数是一个用于创建新进程的函数,它比 `fork/exec` 更加高效、安全和灵活。下面是一个 `posix_spawn` 函数的使用实例: ```c #include <stdio.h> #include <stdlib.h> #include <spawn.h> #include <unistd.h> int main(int argc, char *argv[]) { pid_t pid; char *args[] = {"/bin/ls", "-al", NULL}; posix_spawn_file_actions_t actions; posix_spawn_file_actions_init(&actions); posix_spawn_file_actions_addclose(&actions, STDIN_FILENO); posix_spawn_file_actions_addclose(&actions, STDOUT_FILENO); posix_spawn_file_actions_addclose(&actions, STDERR_FILENO); if (posix_spawn(&pid, args[0], &actions, NULL, args, NULL) != 0) { perror("posix_spawn"); return EXIT_FAILURE; } waitpid(pid, NULL, 0); posix_spawn_file_actions_destroy(&actions); return EXIT_SUCCESS; } ``` 在上面的例子中,我们首先定义了一个 `args` 数组,它包含了我们要执行的命令及其参数。然后,我们初始化了一个 `posix_spawn_file_actions_t` 对象,并为其添加了三个关闭文件描述符的操作,以避免子进程继承父进程的标准输入、标准输出和标准错误流。 接着,我们调用了 `posix_spawn` 函数来创建新进程。如果成功,该函数将返回子进程的进程 ID。最后,我们调用了 `waitpid` 函数等待子进程退出,并销毁了 `posix_spawn_file_actions_t` 对象。 需要注意的是,`posix_spawn` 函数在创建新进程时会执行一个新的程序映像,因此它不会继承父进程的内存空间和上下文。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值