1.linux下同目录下新建管道:
fifo_read.c
mkfifo fifo1 0666
2.同目录下放入test.264文件,新建copy.264文件(记得给权限)
fifo_write.c
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <limits.h>
#include <errno.h>
#define BUFES 1024
int fd ,fd1;
int n, i ,readlen;
char buf[BUFES];
int main(void)
{
printf("BUFFS is :%d\n",PIPE_BUF);
if((fd=open("fifo1",O_WRONLY))<0){
perror("open fifo1");
exit(1);
}
if((fd1=open("test.264",O_RDONLY))<0){
perror("open test.264");
exit(1);
}
printf("before while\n");
while((readlen=readTobuf(fd1,buf,BUFES))>0){
printf("readTobuf size--->%d\n",readlen);
readlen=0;
my_write(fd,buf,BUFES);
}
printf("****end****\n");
close(fd);
exit(0);
}
int my_write(int fd,void *buffer,int length)
{
int bytes_left;
int written_bytes;
char *ptr;
ptr=buffer;
bytes_left=length;
while(bytes_left>0)
{
written_bytes=write(fd,ptr,bytes_left);
if(written_bytes<=0)
{
if(errno==EINTR) /* 中断错误*/
written_bytes=0;
else /* 其他错误 没有办法,只好撤退了*/
return(-1);
}
bytes_left-=written_bytes;
ptr+=written_bytes; /* 从剩下的地方继续写 */
}
return(0);
}
int readTobuf(int fd,void *buffer,int length)
{
int bytes_left;
int bytes_read;
char *ptr;
ptr=buffer;
bytes_left=length;
while(bytes_left>0)
{
bytes_read=read(fd,ptr,bytes_left);
if(bytes_read<0)
{
if(errno==EINTR)
bytes_read=0;
else
return(-1);
}
else if(bytes_read==0)
break;
bytes_left-=bytes_read;
ptr+=bytes_read;
}
return(length-bytes_left);
}
fifo_read.c
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#define BUFES 1024
int fd;
int fd1;
int readlen;
char buf[BUFES];
int main(void)
{
int sum=0;
int i;
if((fd=open("fifo1",O_RDONLY))<0)
{
perror("open fifo1");
exit(1);
}
if((fd1=open("copy.264",O_WRONLY))<0)
{
perror("open copy.264");
exit(1);
}
while((readlen=my_read(fd,buf,BUFES))>0){
printf("my_read size--->%d\n",readlen);
readlen=0;
writeTo264(fd1,buf,BUFES);
}
printf("*****end******\n");
close(fd);
exit(0);
}
int my_read(int fd,void *buffer,int length)
{
int bytes_left;
int bytes_read;
char *ptr;
ptr=buffer;
bytes_left=length;
while(bytes_left>0)
{
bytes_read=read(fd,ptr,bytes_left);
if(bytes_read<0)
{
if(errno==EINTR)
bytes_read=0;
else
return(-1);
}
else if(bytes_read==0)
break;
bytes_left-=bytes_read;
ptr+=bytes_read;
}
return(length-bytes_left);
}
int writeTo264(int fd,void *buffer,int length)
{
int bytes_left;
int written_bytes;
char *ptr;
ptr=buffer;
bytes_left=length;
while(bytes_left>0)
{
written_bytes=write(fd,ptr,bytes_left);
if(written_bytes<=0)
{
if(errno==EINTR) /* 中断错误*/
written_bytes=0;
else
return(-1);
}
bytes_left-=written_bytes;
ptr+=written_bytes;
}
return(0);
}