微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将未命名管道转换为命名管道 c?

如何解决如何将未命名管道转换为命名管道 c?

例如,我正在制作一个未命名管道,但我不知道如何将代码转换为命名管道 (FIFO) 并尝试与未命名管道相同地运行。 这是代码

#include<ctype.h>

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

#include<getopt.h>

#include<fcntl.h>

#include <errno.h>

#include <string.h>

#include <wait.h>

#define OPT_LIST "n:"

int main(int argc,char *argv[])

{

    int nr=-1;

    int c;

    int option;

    opterr=0 ; 
      
    int n=-1;       

    while((c = getopt(argc,argv,"n:")) != -1)                                 
    {       
                
      switch(c)

        {

           case 'n' :   
             printf("\tOption %c,argument %s length %ld\n",c,optarg,strlen (optarg));
 
               
                if (optarg[0] > '9' || optarg[0] <  '2' || strlen(optarg) >= 2)
                {  
                   fprintf(stderr,"Erorr: argument [2...9]  wrong value: %s\n",optarg); 
                   exit(EXIT_FAILURE);
                }

                nr= atoi(optarg);
             break;

          case  '?' : 
           fprintf(stderr,"UnkNown operation: %c \n",c);
            exit(EXIT_FAILURE);
        }

     }
     if (nr == -1) 
     {
      fprintf(stderr,"Usage: %s without arguments\n",argv[0]);
      exit(EXIT_FAILURE); 
     }     
         
        int fd[2];
        int p;
        int status;
        int pid,i=0;
        char buf[20];
        size_t bytes_read;
        char message[100]="1234567890";   //random number
          fprintf(stderr,"\n [0] Process MAIN with PID=%ld si PPID=%ld (SHELL)\n",(long) getpid(),(long)getppid());
        for(i=1;i<=nr;i++){
           
             if(p=fork())
             {
               while (wait(&status) != p){;};    
            // proces MAIN  copil 1
            if ((i==2))    
            { 
            
              read(STDIN_FILENO,&message,sizeof(message)); 
             fprintf(stderr,"\n\t[%d]  PID=%ld,PPID=%ld Message received: %s\n",i-1,(long)getppid(),strcat(message,"___I'm back")); 
            }
              break; 
            }
           
            else{
             switch (i)
            {
             case 1:
             if (pipe(fd) == -1) { perror("pipe");  exit(EXIT_FAILURE);};
                dup2(fd[0],STDIN_FILENO);
             dup2(fd[1],STDOUT_FILENO);
             close(fd[0]);
             close(fd[1]);
              sprintf(message,"%s%d","Salut...",i);
             write(STDOUT_FILENO,message,strlen(message));    
             fprintf(stderr,"\n\t[%i]  PID=%ld,PPID=%ld Message sended: %s\n",i,message);               
              break;    
             default:  
                read(STDIN_FILENO,sizeof(message));   
                fprintf(stderr,message);   
               //write
               sprintf(message,i);
               write(STDOUT_FILENO,strlen(message));   
               break;
              }

             }  // end copil
         } // end for

       exit(0);
   }  // end proces main main

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。