当前位置:  技术问答>linux和unix

FIFO的问题

    来源: 互联网  发布时间:2015-09-26

    本文导语:  有名管道用于客户/服务器模式,服务器程序建立服务器管道,客户程序向服务器管道写入信息,服务器端读取数据后,向客户程序发送信息,服务器收到了客户端的程序的信息,但是向客户端建立的管道写入数据时...

有名管道用于客户/服务器模式,服务器程序建立服务器管道,客户程序向服务器管道写入信息,服务器端读取数据后,向客户程序发送信息,服务器收到了客户端的程序的信息,但是向客户端建立的管道写入数据时发生阻塞,停止运行,无法向客户端管道写入数据,请各位指教 
/*------------------------ 
   FIFO客户与服务器所需的头文件 
-------------------------*/ 
#ifndef FIFO_CS_H 
#define FIFO_CS_H 
#include 
#include 
#include 
#define  SERVER_FIFO_NAME "SFIFO" 
#define CLIENT_FIFO_NAME   "C%d" 
#endif 

/*file :fifo_s.c*/ 

#include "fifo_cs.h" 
void main() 

int fdserver; 
int fdclient; 
pid_t cpid,spid; 
char client_fifio_name[32]; 

/*创建服务器FIFO管道*/ 
mkfifo(SERVER_FIFO_NAME,0660); 
if(fdserver=open(SERVER_FIFO_NAME,O_RDWR)==-1) 

printf("Server :Can not open fifon"); 
fflush(stdout); 
exit(1); 

spid=getpid(); 
while(1) 

/*读取客户进程的pid并生成FIFO文件名*/ 
read(fdserver,&cpid,sizeof(pid_t));/*阻塞,直到客户进程写入*/ 
sprintf(client_fifo_name,CLIENT_FIFO_NAME,cpid); 
/*向客户FIFO管道写入服务器进程pid*/ 
if((fdclient=open(client_fifo_name,O_WRONLY))==-1) 
continue; 
write(fdclient,&spid,sizeof(pid_t)); 
close(fdclient); 


*file :fifo_c.c*/ 

#include "fifo_cs.h" 
void main() 

    int fdserver; 
    int fdclient; 
    pid_t cpid,spid; 
    char client_fifo_name[32]; 
    /*打开服务器FIFO管道*/ 
    if((fdserver=open(SERVER_FIFO_NAME,O_WRONLY))==-1) 
    { 
    printf("Server not activen"); 
    exit(1); 
    } 
    /*创建并打开客户FIFO管道*/ 
    cpid=getpid(); 
    sprintf(client_fifo_name,CLIENT_FIFO_NAME,cpid); 
    mkfifo(client_fifo_name,0660); 
    if((fdclient=open(client_fifo_name,O_RDWR))==-1) 
    { 
    close(fdserver); 
    printf("Can not open fifo n"); 
    exit(1); 
    } 
    /*写入自身pid,读出服务器pid*/ 
    write(fdserver,&cpid,sizeof(pid_t)); 
    read(fdclient,&spid,&spid,sizeof(pid_t));/*阻塞,直到服务器进程写入*/ 
    
    printf("Client :Get server pid :%dn",spid); 
    
    close(fdserver); 
    close(fdclient); 
    
    unlink(client_fifo_name);   
}

|
write(fdclient,&spid,sizeof(pid_t)); 
read(fdclient,&spid,&spid,sizeof(pid_t));/*阻塞,直到服务器进程写入*/
写入的东西和读的不配额...
还有你的服务端不能长时间监听客户端的连接,,就是当全部客户端连接完后,再去连接就不行了.

|

帮你顶一下

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • FIFO一段小程序,无法读出FIFO。
  • 十万火急==关于fifo读文件???
  • fifo
  • FIFO属于什么原语?
  • 重分求解,UNIX下的消息队列非常失败,经常发生堵塞现象,现改用FIFO,但FIFO又得自己设计消息,请高手指点
  • 关于unix下的fifo的疑问
  • 请问,FIFO的读写是否有字节数限制,PIPE_BUF如何使用?
  • <strong>*******FIFO 逐行读取 坐等大牛*******</strong>
  • tcp与fifo
  • 请问:FIFO文件能用mmap来使用吗?
  • 多个进程同时向fifo写不同的数据会有什么下场???
  • 请教一下各位高手,为什么fifo管道在线程内总是write失败?
  • 在cygwin中,用mknod()和mkfifo()不能创建fifo,为什么?
  • 请教:linux下的有名管道 fifo深度多大?
  • 进程间通信解决方案 MySQL-fifo-Plugin
  • 我写了一个虚拟命名管道(FIFO)的字符设备,如何使用呢?
  • 有名管道fifo什么时候创建,产生文件的属性
  • 如何用命名管道(FIFO)实现非阻塞模式进程间通讯(IPC)?
  • LINUX 下播放 DVD 全攻略 (关键字 DVD-ROM LiViD fifo OMS)
  • 求命名管道FIFO编写两个程序,实现通信,简单聊天功能。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3