Window中模拟Linux管道功能的函数
来源:互联网 发布:npm 淘宝镜像失败 编辑:程序博客网 时间:2024/06/05 10:05
Window中模拟Linux管道功能的函数
参数
int nPortNo; // 端口号
int nPipe[2]; // 传出socket通信用的ID [0]收消息,[1]发信息
函数实现
int CreatePipe(intnPortNo, int nPipe[2]){ int iSts = 0; printf("PIPE 创建");// Windows中创建管道(linux中的管道)#ifdef WIN32 int iSockfd; int iSocklen; long lTemp; struct sockaddr_in srcAddr; struct sockaddr_in dstAddr; WSADATA data; int iErno; // 变量初始化 iSockfd = -1; iSocklen = sizeof(struct sockaddr_in); lTemp = 0; iErno = 0; memset(&srcAddr, 0, sizeof(srcAddr)); memset(&dstAddr, 0, sizeof(dstAddr)); memset(&data, 0, sizeof(data)); // WinSock初始化 iErno = WSAStartup(MAKEWORD(2,0),&data); if(iErno != 0) { printf("WinSock初始化失败"); return -1; } // 创建socket iSockfd = socket(AF_INET, SOCK_STREAM,IPPROTO_TCP); if(iSockfd == -1) { printf("创建socket失败"); return -1; } // 设置sockaddr_in 结构体 memset(&srcAddr, 0, sizeof(srcAddr)); srcAddr.sin_port = htons((u_short)nPortNo); srcAddr.sin_family = AF_INET; srcAddr.sin_addr.s_addr =htonl(INADDR_ANY); // 绑定 iSts = bind(iSockfd, (struct sockaddr*)&srcAddr,sizeof(srcAddr)); if(iSts != 0) { printf("bind失败"); return -1; } // 监听 iSts = listen(iSockfd, 1); if(iSts != 0) { printf("listen失败"); return -1; } // 地址取得 iSts = getsockname(iSockfd, (structsockaddr *)&dstAddr, &iSocklen); if( iSts != 0) { printf("getsockname失败"); return -1; } // WinSock初始化 nPipe[1] = socket(AF_INET, SOCK_STREAM,IPPROTO_TCP); if(nPipe[1] == -1) { printf("nPipe[1] socket 生成失败"); return -1; } // socket阻塞 lTemp =1; ioctlsocket(nPipe[1], FIONBIO, (u_long*)&lTemp); dstAddr.sin_addr.s_addr =htonl(INADDR_LOOPBACK); // 连接 iSts = connect(nPipe[1], (struct sockaddr*)&dstAddr, sizeof(dstAddr)); if(iSts == -1) { lTemp = WSAGetLastError(); if ((lTemp != WSAEWOULDBLOCK)&& (lTemp != WSAEINPROGRESS)) { printf("connect失败"); return -1; } } // 接受连接,生成新的socket ID nPipe[0] = (int)accept(iSockfd, (structsockaddr *)&srcAddr, &iSocklen); if(nPipe[0] == -1) { printf("accept失败"); return -1; } // 去掉socket的阻塞 lTemp =0; ioctlsocket(nPipe[1], FIONBIO,(u_long*)&lTemp); closesocket(iSockfd);#else // linux中直接创建管道 iSts = socketpair(AF_UNIX, SOCK_STREAM, 0,nPipe); if(iSts != 0) { printf("socketpair失败"); return -1; }#endif return 0;}
- Window中模拟Linux管道功能的函数
- Linux中重定向及管道(将管道“|”的功能比作逻辑“&&”的功能)
- bash中IO重定向功能和管道功能的模拟
- shell脚本模拟window 的回收站功能
- linux中system函数的简要模拟
- Linux功能的部分模拟
- linux与window中sleep函数的头文件
- linux下的pipe()管道函数
- Linux管道函数使用
- linux中管道符的简单使用
- linux c 中简单的管道实现
- linux中管道符的简单使用
- linux命令中|管道流的意思
- linux中有名管道的使用
- Linux中管道命令的用法
- 对于linux中管道的认识
- 【Linux】中管道的几种情况
- 自己模拟实现strcat函数的功能
- pentaho安装配置
- Jquery 查询数据库记录进行显示在FlexiGrid 以及前后台的值传递、对象传递
- 第六章 05_String_5
- Android之WebViewClient与WebChromeClient的区别
- SG函数 hdu 1536 S-Nim
- Window中模拟Linux管道功能的函数
- NDK下编译FFMPEG
- MVC3大牛文章
- 关于android WebViewClient的方法解释
- COCOS2中用MPMoviePlayerController播放视频出现黑屏---iOS开发之最灵异事件之4
- ubuntu 编译 找不到 -ly
- 设置mysql最大连接数的方法
- Linux下的文件被删除后恢复
- 在Ubuntu上下载、编译和安装Android最新源代码