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

大家帮我看看,为什么我用有名管道,两个程序互发,发的发的就不发了,好像堵塞似的

    来源: 互联网  发布时间:2016-02-24

    本文导语:  Aa::Aa(void) { init(); } Aa::~Aa() { m_bStop = true; sem_destroy(&m_semFull);    sem_destroy(&m_semEmpty);  } bool Aa::init() { sem_init(&m_semFull, 0, 0);    sem_init(&m_semEmpty, 0, 1);    // add end   //   Create   a   thread   to   serv...

Aa::Aa(void)
{
init();
}
Aa::~Aa()
{
m_bStop = true;
sem_destroy(&m_semFull);   
sem_destroy(&m_semEmpty); 
}

bool Aa::init()
{
sem_init(&m_semFull, 0, 0);   
sem_init(&m_semEmpty, 0, 1);   
// add end  
//   Create   a   thread   to   serve   each   pipe   instance 
        //sleep(1);
int ret= pthread_create( &fn, NULL, thr_rev, (void*)this );    
if(ret!=0)
{

return false;
}
else
{

}
ret= pthread_create( &fn, NULL, thr_snd,(void*)this);    
if(ret != 0)
{

return false;
}
else
{


return true;
}
void * Aa::thr_rev( void *arg )
{

int readfifo,writefifo,readfd,writefd, dummyfd;
        
if((mkfifo(”abcd”,O_CREAT|0666)m_PipeName,O_RDWR, 0 );
        // dummyfd = open( pProcessCom->m_PipeName,O_WRONLY, 0 );
while(1)
{
          
if(read( readfd, &recbuf, sizeof(recbuf.msgHead.iLength))>0 )   
{   
                  if( read( readfd, &(recbuf.msgHead.iMsgID), recbuf.msgHead.iLength+sizeof(int))>0 )
{


}
                        memset( &recbuf ,0 , sizeof(sRecbuf) );
}   
}
         //close(readfd);
        // unlink(pProcessCom->m_PipeName);
return NULL;
}


bool Aa::send(sf_pid pid, int siCmd, const char* text, int length)
{

        sem_wait( &m_semEmpty );
     
sprintf(m_pSndPara->tempPipeName, "%s%da",m_pathName,pid);
sem_post( &m_semFull );
return true;
}


void * Aa::thr_snd( void *arg ) 
{  
CLogManager *pLogMgr = NULL;
CModuleLog  *pLog    = NULL;
Aa* pProCom = ( Aa* )(arg);
pthread_detach(pthread_self());

while( true )
{

sem_wait( &(pProCom->m_semFull) );
                printf("pipe is null!n");

int writefd = open( pProCom->m_pSndPara->tempPipeName, O_WRONLY|O_NONBLOCK, 0 );

if( writefd == -1 )
{

sem_post( &(pProCom->m_semFull) );
continue;
}


int ret = write( writefd,pTemp, pProCom->m_pSndPara->msg.msgHead.iLength + 2*sizeof(int));

                close(writefd);
               // sleep(1);
sem_post( &(pProCom->m_semEmpty) );
}
return NULL;
}

|
Mark

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












  • 相关文章推荐
  • 简单!看看这个方法!简单!看看这个方法!
  • linux高手看看
  • 好消息,近来看看......
  • 我想看看有关Linux和Unix的源码,有什么好的建议
  • 想看看linux的内核源代码!从哪里开始!给点建议!!
  • 我初学JAVA,大家愿意交朋友的进来看看!留QQ的给分啊!
  • 关于全选的问题大家帮忙看看~
  • jsp论坛,大家快去看看,解决树形目录http://52jsp.126.com
  • 各位大侠,小侠,快过来看看。
  • 看过操作系统设计与实现的进来看看
  • 请进来看看!!
  • 帮我看看下面这条语句??
  • 大家去软件工程论坛里面去看看那,我发了700分的问题!!
  • 建议去这里看看,有好多基本的重要知识! 绝对值得一看!
  • 大家帮我看看,我好把贴子结了,里面有100分。。。。。。
  • 到 http://www.xbit2008.com 看看技术文章把! 我写的或从网上摘的!
  • 虚心请教问题,帮我看看好吗?
  • 我刚申请的域名rootsafe.com大家看看怎么样? up有分!
  • 帮我看看是不是被黑了?
  • 我的Solaris启动不了了,请帮忙看看


  • 站内导航:


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

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

    浙ICP备11055608号-3