套接口和I/O通信

  几个I/O相关的函数:

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
int close(int fd);

  为了实现通信,fd可以是套接口(见linux的套接口和管道)的描述符。使用示例如下:

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <time.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/socket.h>#ifndef SHUT_WR
#define SHUT_WR 1
#endifint main()
{int z;int s[2];char *msgp;int mlen;pid_t chpid;char buf[80];z = socketpair(AF_LOCAL,SOCK_STREAM,0,s);if (z==-1){fprintf(stderr,"%s:socketpair(AF_LOCAL,SOCK_STREAM,0)\n",strerror(errno));exit(1);}//char *cp;//z=write(s[1],cp="Hello?",6);//printf("Wrote message '%s' on s[1]\n",cp);//z=read(s[0],buf,sizeof buf);//buf[z]=0;//printf("Received message '%s' from socket s[0]\n",buf);
printf("s[0]=%d;\n",s[0]);printf("s[1]=%d;\n",s[1]);chpid = fork();if ( chpid == (pid_t)-1 ){fprintf(stderr,"%s:fork(2)\n",strerror(errno));exit(1);}else if (chpid==0){ char rxbuf[80];printf("Parent PID is %ld\n",(long)getppid());close(s[0]);s[0]=-1;msgp="%Y-%m-%d %A %H:%M %P";mlen=strlen(msgp);printf("Child sending request '%s'\n",msgp);fflush(stdout);z=write(s[1],msgp,mlen);if (z<0){fprintf(stderr,"%s:write(2)\n",strerror(errno));exit(1);}/*    if (shutdown(s[1],SHUT_WR)==-1){fprintf(stderr,"%s:shutdown(2)\n",strerror(errno));exit(1);} 
*/z=read(s[1],rxbuf,sizeof rxbuf);if (z<0){fprintf(stderr,"%s:read(2)\n",strerror(errno));exit(1);}rxbuf[z]=0;printf("Server returned '%s' \n",rxbuf);fflush(stdout);close(s[1]);}else{int status;char txbuf[80];time_t td;printf("Child PID is %ld\n",(long)chpid);fflush(stdout);close(s[1]);s[1]=-1;z=read(s[0],buf,sizeof buf);if (z<0){fprintf(stderr,"%s:read(2)\n",strerror(errno));exit(1);}buf[z]=0;time(&td);strftime(txbuf,sizeof txbuf, buf, localtime(&td));z=write(s[0],txbuf,strlen(txbuf));if (z<0){fprintf(stderr,"%s:write(2)\n",strerror(errno));exit(1);}close(s[0]);waitpid(chpid,&status,0);} //system("netstat --unix -p");return 0;
}

  例子有点长,

  //z=write(s[1],cp="Hello?",6);//printf("Wrote message '%s' on s[1]\n",cp);
  //z=read(s[0],buf,sizeof buf);
  //buf[z]=0;
//printf("Received message '%s' from socket s[0]\n",buf);

   这一小段就实现了通信,我已经注释掉了,因为后面写的代码是一个获取服务器时间的代码。这一段代码就是从s[1]写数据,然后从s[0]读取数据。这点和管道是一样的。但是套接口的好处是还可以从s[0]写数据,从s[1]读数据。

  后面的大段代码中使用了shutdown函数,是用于关闭套接口的专用函数,关闭套接口优先使用shutdown函数而不是close函数。shutdown函数的原型:

#include <sys/socket.h>
int shutdown(int sockfd, int how);

  就是因为多了一个how选项,使得shutdown的功能多于close函数。how可以设置为:SHUT_RD, SHUT_WR, SHUT_RDWR。分别是代表关闭读,关闭写,关闭读写(等价于close)。

  为了获取服务器的时间符合需要的格式,还使用了strftime函数:

#include <time.h>size_t strftime(char *s, size_t max, const char *format,const struct tm *tm);

  参数介绍见:http://www.cppblog.com/gan/archive/2008/12/07/68788.html

  下一篇将介绍套接字的域和地址族。

转载于:https://www.cnblogs.com/hanxi/archive/2012/06/04/2533868.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle bcp out,SQL Server利用bcp命令把SQL语句结果生成文本文件

这篇文章主要为大家详细介绍了SQL Server利用bcp命令把SQL语句结果生成文本文件&#xff0c;具有一定的参考价值&#xff0c;可以用来参考一下。感兴趣的小伙伴&#xff0c;下面一起跟随512笔记的小编两巴掌来看看吧&#xff01;在SQL Server里可以调用DOS下的命令行工具bcp来实…

多个查询语句能否一次把结果导出_mysql表中base64格式数据查询

需求&#xff1a;为了避开特殊字符(如&#xff1a;单引号)影响&#xff0c;把某些字段保存为base64格式。SQL语句直接解码base64编码数据&#xff0c;直接查询出原始数据。表中数据如下很不直观&#xff0c;当根据where条件查询时&#xff0c;肉眼不能直接从结果提取到可读信息…

【转帖】Reporting Service rdl报表,在aspx页面显示一张完整的RDL报表

第一次弄RDL报表. 权当自己的一个随手笔记吧.希望能有好的意见或者建议欢迎大家提出来. 一起学习.灰常欢迎.. 第一步,先找出你的Reporting Server 的 URL . 如图&#xff1a; 其中URL 就是ReportingServer 的URL 在新建的aspx页面部署的时候非常重要. 虚拟目录的话,在WIN 7 上…

志愿者招募 | 2021 .NET Conf China

回顾往届 .NET Conf China 活动志愿者团队承担着非常重要的职责参与到活动组织和安排过程的方方面面志愿者的团队协作和专业素养展示出了高度的凝聚力和号召力无私付出和敬业得到了多方的好评今年&#xff0c;我们诚邀更多志愿者加入与助力为 2021年中国 .NET 开发者大会提供志…

数学上最有趣的数,装得了逼,撩得了妹!

全世界只有3.14 % 的人关注了爆炸吧知识一分钟记住走马灯数那些美丽有趣的自然数一定有它存在的意义&#xff0c;就像帅气逼人的超模君依然具有令人羡慕的才华。但是&#xff0c;存在这么一些自然数&#xff0c;例如走马灯数一直被视为无用&#xff0c;一身正气的超模君决定找到…

php运算符优先级题目,详解php运算符优先级

php中&#xff0c;一个运算可能是有多个运算符连接在一起的&#xff0c;我们给其运算的执行决定先后顺序&#xff0c;下面由小编给大家介绍php运算符优先级&#xff0c;希望对需要的朋友有所帮助&#xff01;在php运算中遵循的规则就是&#xff1a;优先级高的运算符优先执行&am…

阿里开发规范文档_华为阿里等技术专家15年开发经验总结:SSM整合开发实战文档...

前言Spring自2002年诞生至今&#xff0c;已有近20年的历史&#xff0c;虽然几经变迁&#xff0c;但始终在继续发展和精进。Spring目前由Pivotal维护和开发。Pivotal是PaaS&#xff08;平台即服务&#xff09;的领导者&#xff0c;也是消息中间件RabbitMQ的缔造者。12306的流量销…

两天低效编程总结

这两天在用appcan做手机应用&#xff0c;非常纠结。就原因做一下总结和备忘&#xff1a; 1.产品设计足够了&#xff0c;技术设计还不够。中途换了一次框架&#xff0c;没有考虑到换框架的兼容性。 2.过于依赖调试工具&#xff0c;设计和写代码时的大局观不够。 3.时间管理做得不…

Swift中的区间运算符和半开区间运算符

2019独角兽企业重金招聘Python工程师标准>>> 区间&#xff0c;使用三个点表示&#xff08;a...b&#xff09;&#xff0c;表示从a到b&#xff0c;包含a和b&#xff0c;b要大于a&#xff0c;包含第一个和最后一个 半开区间&#xff0c;&#xff08;a..<b&#xf…

软件项目开发过程中主要遇到的核心问题小结

最近在北京组织管理某银行的现金管理系统项目的开发&#xff0c;对软件项目开发过程中遇到的问题进行一些心得体会小结&#xff0c;怕时间长了没及时写下来时间久了被遗忘了&#xff0c;现在趁项目还在开发过程&#xff0c;把体会相对深刻时&#xff0c;感受到的一些问题整理下…

使用 Directory.Build 来消除项目文件中的重复配置

使用 Directory.Build 来消除项目文件中的重复配置Intro如果解决方案里的项目比较多的话&#xff0c;往往会有很多重复的项目属性&#xff0c;通常我们可以使用独立的 props 属性文件来配置公用的属性&#xff0c;而一般的属性文件都需要手动的 Import 到项目文件中&#xff0c…

mysql 批量更新和批量插入

1. 批量更新 update table_name set field_name CASE id WHEN id1 THEN field_value, WHEN id1 THEN field_value END 2.批量插入 insert into table_name (field1_name, field2_name) values(field1_value, field2_name) , (field1_value, field2_name)

chromium关闭更新_Win10今年最重磅更新!Win10 2004正式版详尽体验

今年首个Windows 10正式版更新于近日上架MSDN&#xff0c;版本号最终确定为Build 19041.208(v2004)&#xff0c;这是一个RTM版本&#xff0c;也就是送到OEM厂商压盘的正式版本&#xff0c;向用户正式推送的时候不会再有什么功能变化。按照微软的一贯逻辑&#xff0c;上半年更新…

Android网络通信的六种方式示例代码

表1展示了Android SDK中的一些与网络有关的API包名表1. Android SDK 网络包包 描述 API LevelJava.net 提供与联网有关的类&#xff0c;包括流和数据包&#xff0…

技术分享 | 业务模板的技术实践

源宝导读&#xff1a;“业务模板”作为天际建模平台3.0推出的重要特性&#xff0c;它将元数据复用发挥到了极致&#xff0c;通过业务模板几乎可以覆盖整个建模元数据开发流程&#xff0c;提供业务场景级别的复用能力。本文将介绍“业务模板”的设计原理、实现方案和应用场景。一…

为什么那么好的女孩子还单身?

1 终于知道家里的吃的都是怎么没的了&#xff01;2 我的小鱼干&#xff01;快给我&#xff01;3 这几只狗子真是太皮了&#xff01;4 您点的肉香满溢披萨到了~5 一位新手爸爸分享了自己关于为人父母的感悟6 应采儿&#xff1a;为什么那么好的女孩子还单身&#xff1f; 陈小春&a…

php上传预览源码,php批量上传五[带预览]-PHP源码

《script》ec(2);《script》$path$_SERVER["DOCUMENT_ROOT"];//服务器路径$i 0;foreach ($_FILES["pictures"]["error"] as $key > $error) {if ($error UPLOAD_ERR_OK) {$upload_file$_FILES[pictures][tmp_name][$key];//文件被上传后在服…

RHCS创建高可用集群apche服务器

实验环境&#xff1a; 系统版本&#xff1a;RHEL5.4 将selinux关闭&#xff0c;刷新iptables -F 配置yum仓库 192.168.0.25 station25.example.com 宿主机 192.168.0.24 station24.example.com 节点(虚拟机) 192.168.0.39 station39.example.com 节点(…

成不了天才,但为何也没成人材?(转)

长期以来&#xff0c;"软件业"一直被视为"智力密集"型的"朝阳"产业&#xff0c;大多数从业者都受过高等教育&#xff0c;其平均素质居于社会各行业的前列&#xff0c;这个产业的顶尖人物被公众视为"知识英雄"&#xff0c;比如微软公司…

python rgb转lab_从RGB转换到LAB色彩空间 - 深入了解L * A * B *值的范围?

在OpenCV(Python)中将图像从RGB转换为LAB时&#xff0c;我无法找到有关L * A * B *值范围的文档。寻找一些确认我的见解是正确的&#xff0c;因为这些数字相当奇特。我的轻度结果是从0-255&#xff0c;但对于a和b我分别得到了42-226和20-223。我知道这些数值不需要有一个预定的…