您尚未登录。

#1 2014-09-25 16:39:03

lijing48301243
会员
注册时间: 2013-04-14
帖子: 137

网络程序如何改造成支持管道的程序

如下为一个socket程序, 我想它改造成支持管道功能, 方便测试, 请大牛指点g方向

/******************主函数*************************/
  7 int main(int argc, char *argv[])
  8 {
  9         int listenfd, port, *connfdp, connfd;
10         int clientlen = sizeof(struct sockaddr_in);
11         struct sockaddr_in clientaddr;
12         pthread_t tid;
13
14         if(argc != 2)
15         {
16                 printf("usgage: %s <port>", argv[0]);
17                 exit(0);
18         }
19         /*******监听socket接口*********/
20         port = atoi(argv[1]);
21         listenfd = Open_listenfd(port);
22         
23         /*******连接数据库************/
24         void *dbcon = DB_init();
25         DB_real_connect(dbcon);
26         
27         while (1)
28         {
29                 connfd = Accept(listenfd, (SA *)&clientaddr, &clientlen);
                      //逻辑处理入口 protocol(int fd, void *dbcon)  数据流通过fd进行收发
30                 protocol(connfd, dbcon);
31                 Close(connfd);
32         }
33         DB_close(dbcon);
34 }


archlinux磨合中

离线

#2 2014-09-26 13:33:44

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: 网络程序如何改造成支持管道的程序

「支持管道功能」是什么功能?你的需求是什么?

离线

#3 2014-09-26 15:39:09

lijing48301243
会员
注册时间: 2013-04-14
帖子: 137

Re: 网络程序如何改造成支持管道的程序

我想让我的 程序支持 "|"
比如: echo "0026000001204343"  | myprog   |  more
这样我就可以把测试脚本都写成shell,  不需要启动网络端口进行测试, 个人觉得这样分离测试业务逻辑很轻量

目前我i已经利用mkfifo写成这样
assert(mkfifo("/tmp/FIFO", 0666) == 0);
    fd = open("/tmp/FIFO",O_RDWR) ;
    while (1)
    {
        (*protocol)(fd, NULL);
        read(fd, buffer,1024);
        printf("%s", buffer);

    }
但是我最终想实现支持 "|"

顺便问下百合: 如果我想看arch中类似more/cat/ls等的源码, 去哪里找? 我可以参考一下哈


archlinux磨合中

离线

#4 2014-09-26 16:01:33

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: 网络程序如何改造成支持管道的程序

网络程序用 nc / socat 连接吧。我不明白一个网络程序为什么可以用管道:它们是不同的模型(面向流的套接字在有客户端连接时会产生新的文件描述符,其它类型的文件描述符不会这样)。学习 Linux C 的话,推荐这个Linux C编程一站式学习

Arch 的话,可以使用 yaourt / abs 或者 git / svn 来取得官方使用的 PKGBUILD,然后去 makepkg -g 获取源码。你也可以直接去对应的官网(比如 coreutils 找 GNU)上下载源码。

离线

页脚