FIFO
普通管道一般用于父子进程中,如果不是父子进程呢?
那么用命名管道(FIFO)
1.命名管道可以用于两个不相关的进程之间传输数据
2.命名管道在文件系统中是以文件的形式真实存在的,只不过比较特殊而已
3.当共享管道的进程执行完所有的I / O操作以后,这个管道文件还是存在的,知不是   里面什么数据也没有罢了,不过下次还是可以用的
mkfifo

int mkfifo(const char * pathname,mode_t mode);

另外

当使用open()来打开 FIFO文件时,O_NONBLOCK旗标会有影响
1、当使用O_NONBLOCK 旗标时,打开FIFO 文件来读取的操作会立刻返回,但是若还没有其他进程打开FIFO 文件来读取,则写入的操作会返回ENXIO 错误代码。
2、没有使用O_NONBLOCK 旗标时,打开FIFO 来读取的操作会等到其他进程打开FIFO文件来写入才正常返回。同样地,打开FIFO文件来写入的操作会等到其他进程打开FIFO 文件来读取后才正常返回。
返回值
若成功则返回0,否则返回-1,错误原因存于errno中。
错误代码
EACCESS 参数pathname所指定的目录路径无可执行的权限
EEXIST 参数pathname所指定的文件已存在。
ENAMETOOLONG 参数pathname的路径名称太长。
ENOENT 参数pathname包含的目录不存在
ENOSPC 文件系统的剩余空间不足
ENOTDIR 参数pathname路径中的目录存在但却非真正的目录。
EROFS 参数pathname指定的文件存在于只读文件系统内。

#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <
string.h>

#define FIFO
"/home/nsl/myprogram/myfifo"

main(int argc,char** argv)
{
  char buf_r[100];
  int    fd;
  int    nread;
  
  
if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))
        printf(
"cannot create fifoserver\n");
  printf(
"Preparing for reading bytes...\n");
  
  memset(buf_r,0,sizeof(buf_r));
  fd=open(FIFO,O_RDONLY|O_NONBLOCK,0);
  
if(fd==-1)
  {
     perror(
"open");
     
exit(1);  
  }
  
while(1)
  {
     memset(buf_r,0,sizeof(buf_r));
    
     
if((nread=read(fd,buf_r,100))==-1)
     {
        
if(errno==EAGAIN) printf("no data yet\n");
     }
     printf(
"read %s from FIFO\n",buf_r);
     sleep(1);
  }  
  pause();//进程挂起,直到下一个信号到来
  unlink(FIFO);
}
这里采用非阻塞模式的方式打开fifo文件,并每隔1s对管道进行读
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FIFO_SERVER "/home/nsl/myprogram/myfifo"

int main(int argc,char** argv)
{
  int fd;
  char w_buf[100];
  int nwrite;
  
  fd=open(FIFO_SERVER,O_WRONLY|O_NONBLOCK);
  
  if(fd==-1)
    if(errno!=0)
      {printf("fifo open error:%s\n",strerror(errno));}
    
  if(argc==1) {printf("2 parameters\n");return 0;}
    
  strcpy(w_buf,argv[1]);
  if((nwrite=write(fd,w_buf,100))==-1)
  {
    if(errno==EAGAIN) printf("The FIFO has not been read yet.Please try later\n");
  }
  else
    printf("write %s to the FIFO\n",w_buf);
  printf("test1 end\n");
  return 0;
}
这是对管道的写
这是管道的基本应用范例
也没用到过,具体不清楚,不多说了