写了两个进程,简述一下fifo原理(我是这么认为的,有什么不对的还请指正)
我觉得他这并不像是管道,而更像对文件的操作。。。
#ifndef _COMMON_H_
#define _COMMON_H_
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<string.h>
#include<stdlib.h>
#include<fcntl.h>
#define MAX_STRING 1024
const char fifo1[] = { "/tmp/fifo1" };
const char fifo2[] = { "/tmp/fifo2" };
#endif
#include "common.h"
void changeLetter(char *string)
{
int i;
for ( i = 0; string[i] != '\0'; i++)
{
if (string[i] <= 'z'&& string[i] >= 'a')
{
string[i] -= 32;
}
else if (string[i] <= 'Z'&& string[i] >= 'A')
{
string[i] += 32;
}
}
}
void main(void)
{
int fd1, fd2;
char buf[MAX_STRING];
//open fifo1
fd1 = open(fifo1,O_RDONLY,0777);
if (fd1<0)
{
printf("can`t open fifo:%s\n",fifo1);
exit(1);
}
fd2 = open(fifo2, O_WRONLY, 0777);
if (fd2<0)
{
printf("can`t open fifo:%s\n", fifo2);
exit(1);
}
//main process
while (1)
{
memset(buf,0,MAX_STRING);
read(fd1,buf,MAX_STRING);
printf("code process read data:%s\n",buf);
changeLetter(buf);
printf("code process change data:%s\n",buf);
write(fd2,buf,strlen(buf));
printf("code process send data finished!\n");
}
}
#include "common.h"
void main()
{
//fifo id
int fd1,fd2;
//file id
int file1, file2;
char filePath[MAX_STRING];
int readSize;
char buf[MAX_STRING];
//create 1 fifo
if (-1 == access(fifo1,F_OK))
{
if (mkfifo(fifo1,0777)<0)
{
printf("can`t create fifo1 %s\n",fifo1);
exit(1);
}
}
if (-1 == access(fifo2, F_OK))
{
if (mkfifo(fifo2, 0777)<0)
{
printf("can`t create fifo2 %s\n", fifo2);
exit(1);
}
}
//open 1 fifo
fd1 = open(fifo1,O_WRONLY,0777);
if (fd1<0)
{
printf("can`t open fifo1 %s\n",fifo1);
exit(1);
}
fd2 = open(fifo2, O_RDONLY, 0777);
if (fd2<0)
{
printf("can`t open fifo2 %s\n", fifo2);
exit(1);
}
//main process
while (1)
{
//select change code file
printf("please input your source file path:");
memset(filePath, 0, sizeof(filePath));
scanf("%s", filePath);
file1 = open(filePath, O_RDONLY, 0777);
if (file1<0)
{
printf("file1 can`t open:%s,please input again ",filePath);
continue;
}
//read file1,sand data to fifo1
memset(buf, 0, MAX_STRING);
readSize = read(file1, buf, MAX_STRING);
write(fd1, buf, readSize+1);
close(file1);
//read coed data from fifo2
memset(buf, 0, MAX_STRING);
readSize = read(fd2, buf, MAX_STRING);
printf("received:%s\n",buf);
//creat and write data to file2
strcat(filePath, ".changed");
file2 = open(filePath, O_WRONLY | O_CREAT, 0777);
if (file2<0)
{
printf("can`t create and open %s\n", filePath);
close(file1);
continue;
}
write(file2, buf, readSize);
printf("%s the file write done\n ",filePath);
close(file2);
}
close(fd1);
close(fd2);
}