网站大量收购独家精品文档,联系QQ:2885784924

并发服务器1.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
并发服务器1

软 件 学 院 信息安全产品开发实践实验七报告 陈枝-1043111034 2012-11-02 四 川 大 学 计 算 机 学 院、软 件 学 院 实 验 报 告 班级:__第 周 ? 信息安全产品开发实践 实验课时 2 实验项目 并发服务器(一) 实验时间 第九周 2012年月日星期2012年月日星期 实验目的 服务器模型 多进程服务器模型 实验环境 ?X86,WindowsXP,VMware5.0,RedHat Linux 9.0 实验内容(算法、程序、步骤和方法) 试验题目1 自己编写程序实现远程控制系统中使用到函数popen功能; 思路: 使用管道pipe(int f_des[2])函数(参数f_des[0]用于读取管道,f_des[1]用于向管道写入数据),通过管道实现父子进程间通讯; 步骤: 创建子进程; 在父进程中:关闭f_des[1],使用wait操作与等待子进程,然后将管道中的数据读出打印显示; 在子进程:关闭f_des[0],将管道f_des[1]与标准输出进行重定向(dup2(f_des[1],STDOUT_FILENO)),然后调用execvp()函数执行程序中接收到的命令; 试验题目2 修改远程控制服务器代码,使得服务器同时能够向多个用户提供服务 数据记录 和计算 FILE *mypopen(char *cmd,char type) { int pipefd[2]; //管道描述符 int pid_t; //进程描述符 if(type !=r type != w) { printf(myopen() flag error/n); return NULL; } if(pipe(pipefd)0) //建立管道 { printf(myopen() pipe create error/n); return NULL; } pid_t=fork(); //建立子进程 if(pid_t 0) return NULL; if(0 == pid_t) //子进程中...... { if(type == r) { close(pipefd[0]); //此函数返回文件指针是用于读,因此,在子进程中应该将结果写入管道, //这样父进程返回的文件指针才能读,所以这里将读端关闭 dup2(pipefd[1],STDOUT_FILENO); //exec函数的执行结果将会通过标准输出写到控制台上, //但这里我们不需要在控制台输出,而是需要将结果返回,因此将标准输出重定向到管道写端 close(pipefd[1]); } else{ close(pipefd[1]); dup2(pipefd[0],STDIN_FILENO); close(pipefd[0]); } char *argv[] = {cmd,NULL}; if(execvp(cmd,argv)0) //用exec族函数执行命令 return NULL; } wait(0); //等待子进程返回 if(type==r){ close(pipefd[1]); return fdopen(pipefd[0],r); //由于程序需要返回的参数是文件指针,因此需要用fdopen函数将描述符打开,其返回值为相应的文件指针 }else{ close(pipefd[

文档评论(0)

wnqwwy20 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档