页次: 1
如下为一个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磨合中
离线
「支持管道功能」是什么功能?你的需求是什么?
离线
我想让我的 程序支持 "|"
比如: 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磨合中
离线
网络程序用 nc / socat 连接吧。我不明白一个网络程序为什么可以用管道:它们是不同的模型(面向流的套接字在有客户端连接时会产生新的文件描述符,其它类型的文件描述符不会这样)。学习 Linux C 的话,推荐这个Linux C编程一站式学习。
Arch 的话,可以使用 yaourt / abs 或者 git / svn 来取得官方使用的 PKGBUILD,然后去 makepkg -g 获取源码。你也可以直接去对应的官网(比如 coreutils 找 GNU)上下载源码。
离线
页次: 1