爱在小山丘 2022-11-23 18:27 采纳率: 100%
浏览 3
已结题

计算机操作系统:linux和C语言

问题遇到的现象和发生背景

计算机操作系统: linux下的c语言

用代码块功能插入代码,请勿粘贴截图

差别仅仅在子进程1写入内容输出时候 加没加\n

img

下面是我的代码


#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h> 
#include <sys/wait.h>
#define MAX_DATA_LEN 256
#define DELAY_TIME 1
int main()
{
int fd[2];
  pid_t pid1,pid2;
  const char *str1="子进程111";
  const char *str2="子进程222";
  char buf[1024];
  int writeOne,writeTwo,readTotal;
  if (pipe(fd) < 0){
    printf("pipe create error\n");
    exit(1);
  }
  //子进程1
  if((pid1=fork())==0){
    close(fd[0]);
    if(writeOne=write(fd[1],str1,strlen(str1))!=-1){
        printf("写入内容为:%s\n",str1);
        //printf("写入内容为:%s",str1);
    }
   //子进程2
     if((pid2=fork())==0){
   
    if(writeOne=write(fd[1],str2,strlen(str2))!=-1){
        printf("写入内容为:%s\n",str2);
    }
  }
    close(fd[1]);
  }else{
    close(fd[1]);
    sleep(DELAY_TIME);
    if((readTotal=read(fd[0],buf,MAX_DATA_LEN))>0){
        printf("读到内容:%s",buf);
    }
    close(fd[0]);
    exit(0);
  }

}
 

运行结果及报错内容

我不明白为什么输出两次写入内容子进程111

img

  • 写回答

2条回答 默认 最新

  • curating 2022-11-23 19:09
    关注

    fork 执行会调用2次,第一次是 create 产生父进程,有了第一次输出。第二次调用是复制产生子进程,出现第二次输出。fork调用本身的特性。

    img


    另外通过getpid()和getppid()可以看出过程。

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月26日
  • 已采纳回答 10月18日
  • 创建了问题 11月23日

悬赏问题

  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除
  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题