如何解决如何将未命名管道转换为命名管道 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 举报,一经查实,本站将立刻删除。