📜  在 C for Linux 中使用 fork() 进行阶乘计算

📅  最后修改于: 2022-05-13 01:57:06.251000             🧑  作者: Mango

在 C for Linux 中使用 fork() 进行阶乘计算

使用 fork() 系统调用编写一个 Unix C 程序,该程序生成阶乘并在子进程中给出一系列序列,如 1、2、6、24、120……。
序列号在命令行中提供。
例子:

Input :gfg@ubuntu:~/$ gcc -o fork fork.c
       gfg@ubuntu:~/$ ./fork 6

Output :1 
        1  2 
        1  2  6 
        1  2  6  24 
        1  2  6  24  120 
        1  2  6  24  120  720 
        After deletion sum
        1  3  9  33  153  873 Done

Input :gfg@ubuntu:~/$ gcc -o fork fork.c
       gfg@ubuntu:~/$ ./fork -2

Output :negative number entered -2

使用 fork() 创建子进程。 fork() 返回:

  • < 0未能创建子(新)进程
  • = 0表示子进程
  • > 0即子进程对父进程的进程ID。当 >0 父进程将执行。

子进程内部:如果输入为 6,则阶乘序列的前六个数字将作为子进程的输出。因为父进程和子进程都有自己的数据副本,所以子进程必须输出序列。
父进程内部:父进程调用wait()调用等待子进程完成后退出程序。执行必要的错误检查以确保在命令行上不传递非负数。

// C program to illustrate factorial calculation
// using fork() in C for Linux
#include 
#include 
#include 
#include 
#include 
#include 
  
int main(int argc , char *argv[] )
{
    pid_t pid;
  
    if (argc != 2)
    {
        printf("arg missing or exceeding\n");
        exit(0);
    }
  
    // atoi converts string to integer
    if ( atoi ( argv[1] ) <0 )
    {
        printf("negative number entered %d", atoi(argv[1]));
        exit(0);
    }
  
    pid=fork();
  
    if ( pid<0 )
    {
        printf("failed to create child\n");
        exit(0);
    }
  
    else if ( pid==0 )
    {
        //Child Process
        int ans = 0, i, j, k = 2, n;
  
        // atoi converts string to integer
        n = atoi(argv[1]);
        int arr[n],sum[n];
  
        arr[0] = 1;
  
        // generating factorial series
        for (i=1 ; i 0)
                printf(" %d ", sum[i]);
        }
        exit(0);
    }
  
    // parent process
    else
    {
        wait(NULL);
  
        // waiting for child process to end
        printf("Done\n");
    }
}

以名称 fork.c 保存的编译代码代码

gfg@ubuntu:~/$ gcc -o fork fork.c

输入:

gfg@ubuntu:~/$ ./fork 5

输出:

1 
 1  2 
 1  2  6 
 1  2  6  24 
 1  2  6  24  120 
After deletion sum
 1  3  9  33  153 Done

首先,接受命令行参数。然后传递参数的数量并检查参数是否为正。
之后,生成阶乘序列。
相关文章- 演示 fork() 和 pipe() 的 C 程序

参考:

  • http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html
  • http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/wait.html