Linux中进程环中write函数调用会直接退出(未解决)

该程序可以用来构造由n个进程组成的环,n的值从命令行中获取

  • 此时共需要n个管道。需要注意的是,程序只需要一个长度为2(而不是2n)的数组来保存文件的描述符
  • 由两个进程组成的环被创建好之后,父进程就会退出,而子进程再次进行分支
  • 并在父进程中向管道中输入“1 1”,在子进程中获取并重新输入,以实现斐波那契数列。

问题描述

在进行执行时,发现输出只有一行,当执行到write函数时,程序会自动退出,没有返回异常,结果如图所示:

mrzhi@mrzhi-VirtualBox:~/Desktop/Linux-网络编程/Unix_systems_programming/Chapter7_$ ./test2_ring_filter 4
This is process 1 with ID 7817 and parent id 7432
[7818] : process 1 success to read from pipe : 1 1  errno = Success
222222222222222222222222--->3-----1 2(该行是测试数据)

可以发现代码会卡在write函数,思索一下午,也没能解决,这里先把问题记录一下

/* 该程序可以用来构造由n个进程组成的环,n的值从命令行中获取
 * 此时共需要n个管道。需要注意的是,程序只需要一个长度为2(而不是2n)的数组来保存文件的描述符
 * 由两个进程组成的环被创建好之后,父进程就会退出,而子进程再次进行分支
 * 并在父进程中向管道中输入“1 1”,在子进程中获取并重新输入,以实现斐波那契数列。
 */
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
#include <fcntl.h>
#include <wait.h>
#include "restart.h"

int main(int argc, char *argv[]) {
   
    pid_t childpid;     // 指示进程应该产生另一个进程
    int fd[2];          // 管道中返回的文件描述符
    int i;              // i表示this进程数(从1开始)、
    int error;          // 从dup2调用中返回值
    int nprocs;         // 环中的进程总数
    int ret;
    char buf[256] = "1 1\0";

    // 检查生产有效进程数的命令行
    if ( argc != 2 || ( (nprocs = atoi(argv[1]) ) <= 0) ) {
   
        fprintf(stderr, "Usage: %s nprocs\n", argv[0]);
        return 1;
    }

    // 通过管道将std输入连接到std输出中
    if (pipe(fd
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值