免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1670 | 回复: 5
打印 上一主题 下一主题

请教键盘,怎样用SPX流管道传递描述字 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-10 17:43 |只看该作者 |倒序浏览
main()
{
        char szDataTest[MSG_AREA_SIZE];
        char szIPAddr[20];
       
        int         nSock,nListenSock;
        int         nfd[2];
       
        pid_t _pid_tChild;
       
        ASSERT_RESULT(spipe(&nfd))
        /*if (socketpair(AF_UNIX,SOCK_STREAM,0,nfd)        < 0)
        {
                PrintLog(stderr,"arent: socketpair        failed.";
                return;
        }*/
       
        ASSERT_RESULT(CreateSock(&nListenSock,4444))
       
        ASSERT((_pid_tChild        = fork()) >;= 0)
        if (_pid_tChild        >; 0)
        {
                close(nfd[0]);
                if (!VERIFY(AcceptSock(&nSock, nListenSock,szIPAddr)))
                {
                        close(nListenSock);
                        return;
                }
               
                PrintLog(stderr,"arent: %s        is connect.",szIPAddr);                          
                ASSERT_RESULT(sendfd(nfd[1],nSock))
               
                PrintLog(stderr,"arent        is completed.";                                  
        }else
        {
                int        nNewfd = -1;
               
                PrintLog(stderr,"Child:        start...";
                close(nfd[1]);
                close(nListenSock);
               
                ASSERT_RESULT(recvfd(nfd[0],&nNewfd))               
                PrintLog(stderr,"Child:        nNewfd = %d",nNewfd);
               
                bufclr(szDataTest);
                ASSERT(read(nNewfd,szDataTest,30) != -1)
                PrintLog(stderr,"Child:        read=[%s]",szDataTest);
        }
}
===================
sendfd,recvfd是ioctl传递文件描述字函数。
spipe建立SPX流管道
问题:
如果封上socketpair哪段,使用spipe,可以传递。
而打开socketpair哪段,封上spipe。
在发送文件描述字函数sendfd报错:Invalid argument
是怎么回事?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-07-10 17:52 |只看该作者

请教键盘,怎样用SPX流管道传递描述字

1、spipe建立SPX流管道
建立的时候ioctl(fd[0], I_FDINSERT, &struct_s)。
使用ioctl(fd, I_SENDFD, sendfd)

ioctl(fd, I_RECVFD, (char *) &struct_s)

2。而打开socketpair哪段,封上spipe。
在发送文件描述字函数sendfd报错:Invalid argument

用sendmsg和getmsg两个函数。因为spipe建筑于/dev/spx实现的。

论坛徽章:
0
3 [报告]
发表于 2003-07-10 17:54 |只看该作者

请教键盘,怎样用SPX流管道传递描述字

哦,我以为你那样成功过。谢谢。我再试试

论坛徽章:
0
4 [报告]
发表于 2003-07-10 17:56 |只看该作者

请教键盘,怎样用SPX流管道传递描述字

为什么贴上去没缩格,奇怪

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-07-10 18:07 |只看该作者

请教键盘,怎样用SPX流管道传递描述字

用code能能


  1. 【code】
  2. 【/code】
  3. ......
复制代码

论坛徽章:
0
6 [报告]
发表于 2003-07-10 18:22 |只看该作者

请教键盘,怎样用SPX流管道传递描述字


  1. #include "glx.h"

  2. main()
  3. {
  4.         char szDataTest[MSG_AREA_SIZE];
  5.         char szIPAddr[20];
  6.        
  7.         int         nSock,nListenSock;
  8.         int         nfd[2];
  9.        
  10.         pid_t _pid_tChild;
  11.        
  12.         ASSERT_RESULT(spipe(&nfd))
  13.         /*if (socketpair(AF_UNIX,SOCK_STREAM,0,nfd)        < 0)
  14.         {
  15.                 PrintLog(stderr,"Parent: socketpair        failed.");
  16.                 return;
  17.         }*/
  18.        
  19.         ASSERT_RESULT(CreateSock(&nListenSock,4444))
  20.        
  21.         ASSERT((_pid_tChild        = fork()) >;= 0)
  22.         if (_pid_tChild        >; 0)
  23.         {
  24.                 close(nfd[0]);
  25.                 if (!VERIFY(AcceptSock(&nSock, nListenSock,szIPAddr)))
  26.                 {
  27.                         close(nListenSock);
  28.                         return;
  29.                 }
  30.                
  31.                 PrintLog(stderr,"Parent: %s        is connect.",szIPAddr);                          
  32.                 ASSERT_RESULT(sendfd(nfd[1],nSock))
  33.                
  34.                 PrintLog(stderr,"Parent        is completed.");                                  
  35.         }else
  36.         {
  37.                 int        nNewfd = -1;
  38.                
  39.                 PrintLog(stderr,"Child:        start...");
  40.                 close(nfd[1]);
  41.                 close(nListenSock);
  42.                
  43.                 ASSERT_RESULT(recvfd(nfd[0],&nNewfd))               
  44.                 PrintLog(stderr,"Child:        nNewfd = %d",nNewfd);
  45.                
  46.                 bufclr(szDataTest);
  47.                 ASSERT(read(nNewfd,szDataTest,30) != -1)
  48.                 PrintLog(stderr,"Child:        read=[%s]",szDataTest);
  49.         }
  50. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP