首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fork ()-C编程

fork ()-C编程
EN

Stack Overflow用户
提问于 2014-09-16 14:54:04
回答 4查看 361关注 0票数 1

我有一些问题,这是一个很好的起点,我已经在我需要做的事情上做了点点,但我不确定这是否完全可能。

  • 我有一个文件,我想运行多个实例
  • 我希望为文件的每个进程分配一个新的ID
  • 我需要分配一个煤焦。‘’这是通过argv1给出的一个过程
  • 如果已经有给定字符的进程,则将其打印为stderr。

到目前为止,

我想的是,下面的功能。但我真的不太确定,任何帮助都是可怕的。

代码语言:javascript
复制
int createProcess(char *argv[]){

    //argv[1] is given 'A'
    //fork() 
    //getPID()
    //assign PID to 'A'
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-16 16:45:34

我想你是在找叉子和外卖的组合。您可以分叉创建多个实例,然后使用exec将一个分叉进程替换为另一个进程(在您的例子中,它是同一个进程)。通过execl,您可以给出命令行参数。您可能需要在exec‘s进程中使用sprintf,在原始进程中使用sscanf。我想这暗示已经够多了。

票数 3
EN

Stack Overflow用户

发布于 2014-09-16 16:59:03

如果我理解正确的话,您想要的是将不同的字符“分配”到分叉过程的不同实例。你可以这样做:

代码语言:javascript
复制
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[]){
     char chr = *argv[1];
     pid_t res;

     res = fork();
     if (!res)
         chr++;
     printf("%c \n",  chr);
     return 0;
}   
票数 1
EN

Stack Overflow用户

发布于 2014-09-16 18:55:49

代码语言:javascript
复制
I have a file that I want to run multiple instances of 

要做到这一点,您有两个选择:

  1. 您可以使用多个fork()系统调用来复制新的子进程,并在这些进程中打开文件。
  2. 程序中可以有多个线程打开同一个文件。

但是,看看接下来的三个点,必须选择用叉子()。

代码语言:javascript
复制
I want a new ID assigned to each process for the file 

当您使用fork()复制进程时,每个进程都会得到它自己的唯一进程Id(pid)。

代码语言:javascript
复制
I need to assign a char eg. 'A' that was given through argv[1] to a process 

为此,您需要使用"exec“family.By中使用"exec”的多个调用中的一个

还可以将命令行参数传递给新创建的进程。

这不能由叉来完成,因为叉用于复制当前进程,而如果您想要创建一个全新的进程,则必须使用exec调用。

编辑:

为了获得传递给进程的命令行参数,您需要

知道它的进程id,然后您可以查找一个名称与pid相同的目录。

在/proc文件系统内(未安装在实际设备上)。当您找到目录时

您将在名为"cmdline“的文件中获得传递给它的参数。

有关"/proc“文件系统的更多细节,您可以阅读。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25872045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档