当前位置: 首页 > news >正文

论坛网站html模板windows优化大师卸载

论坛网站html模板,windows优化大师卸载,建筑公司logo设计,asp.net做织梦网站目录 1--进程间通信 2--pipe()函数 3--代码实例 3-1--pipe1.c 3-2--pipe2.c 3-3--pipe3.c 3-4--保存信息的回声服务器端 1--进程间通信 为了实现进程间通信,使得两个不同的进程间可以交换数据,操作系统必须提供两个进程可以同时访问的内存空间&am…

目录

1--进程间通信

2--pipe()函数

3--代码实例

3-1--pipe1.c

3-2--pipe2.c

3-3--pipe3.c

3-4--保存信息的回声服务器端


1--进程间通信

        为了实现进程间通信,使得两个不同的进程间可以交换数据,操作系统必须提供两个进程可以同时访问的内存空间;

        为了完成进程间通信,需要创建管道(pipe);管道并非属于进程的资源,而是属于操作系统;

2--pipe()函数

#include <unistd.h>
int pipe(int filedes[2]);
// 成功时返回0,失败时返回-1
// filedes[0] 通过管道接收数据时使用的文件描述符,即管道出口
// filedes[1] 通过管道传输数据时使用的文件描述符,即管道入口

3--代码实例

3-1--pipe1.c

        子进程从管道入口写数据,父进程从管道出口读数据;

// gcc pipe1.c -o pipe
// ./pipe#include <stdio.h>
#include <unistd.h>
#define BUF_SIZE 30int main(int argc, char *argv[]){int fds[2];char str[] = "Who are you?";char buf[BUF_SIZE];__pid_t pid;pipe(fds); // 创建管道pid = fork();if(pid == 0){ // 子进程执行区域write(fds[1], str, sizeof(str)); // 向管道入口写数据}else{ // 父进程执行区域read(fds[0], buf, BUF_SIZE); // 向管道出口读数据puts(buf);}return 0;
}

3-2--pipe2.c

        利用一个管道实现父进程与子进程的双向通信;

// gcc pipe2.c -o pipe2
// ./pipe2#include <stdio.h>
#include <unistd.h>
#define BUF_SIZE 30int main(int argc, char *argv[]){int fds[2];char str1[] = "Who are you?";char str2[] = "Thank you for your message";char buf[BUF_SIZE];__pid_t pid;pipe(fds); // 创建管道pid = fork();if(pid == 0){ // 子进程执行区域write(fds[1], str1, sizeof(str1)); sleep(2); // sleep的作用是防止子线程写的数据被子线程自身读取了,导致父进程一直等待read(fds[0], buf, BUF_SIZE);printf("Child proc output: %s \n", buf);}else{ // 父进程执行区域read(fds[0], buf, BUF_SIZE); printf("Parent proc output: %s \n", buf);write(fds[1], str2, sizeof(str2));sleep(3);}return 0;
}

3-3--pipe3.c

        利用两个管道实现父进程与子进程的双向通信,其中收发数据在不同的管道上进行;

// gcc pipe3.c -o pipe3
// ./pipe3#include <stdio.h>
#include <unistd.h>
#define BUF_SIZE 30int main(int argc, char *argv[]){int fds1[2], fds2[2];char str1[] = "Who are you?";char str2[] = "Thank you for your message";char buf[BUF_SIZE];__pid_t pid;pipe(fds1), pipe(fds2); // 创建管道pid = fork();if(pid == 0){ // 子进程执行区域write(fds1[1], str1, sizeof(str1)); // 通过管道1写数据read(fds2[0], buf, BUF_SIZE); // 通过管道2读数据printf("Child proc output: %s \n", buf);}else{ // 父进程执行区域read(fds1[0], buf, BUF_SIZE); // 通过管道1读数据printf("Parent proc output: %s \n", buf);write(fds2[1], str2, sizeof(str2)); // 通过管道2写数据sleep(3);}return 0;
}

3-4--保存信息的回声服务器端

        服务器端创建两个进程,一个进程负责与客户端进行通信,将客户端发来的数据通过管道入口写到管道中;另一个进程负责从管道出口中读取数据,并把读取的数据保存在文件中;

        具体可运行代码参考:Chapter11

// gcc echo_storeserv.c -o echo_storeserv
// ./echo_storeserv 9190#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define BUF_SIZE 30void error_handling(char *message){fputs(message, stderr);fputc('\n', stderr);exit(1);
}void read_childproc(int sig){__pid_t pid;int status;pid = waitpid(-1, &status, WNOHANG);printf("remove proc id: %d \n", pid);
}int main(int argc, char* argv[]){int serv_sock, clnt_sock;struct sockaddr_in serv_adr, clnt_adr;int fds[2];__pid_t pid;struct sigaction act; // 信号socklen_t adr_sz;int str_len, state;char buf[BUF_SIZE];if(argc != 2){printf("Usage : %s <port>\n", argv[0]);exit(1);}act.sa_handler = read_childproc; //设置信号处理函数sigemptyset(&act.sa_mask);act.sa_flags = 0;state = sigaction(SIGCHLD, &act, 0);serv_sock = socket(PF_INET, SOCK_STREAM, 0); // 创建 tcp socketmemset(&serv_adr, 0, sizeof(serv_adr));serv_adr.sin_family = AF_INET;serv_adr.sin_addr.s_addr = htonl(INADDR_ANY);serv_adr.sin_port = htons(atoi(argv[1]));if(bind(serv_sock, (struct sockaddr*) &serv_adr, sizeof(serv_adr)) == -1){error_handling("bind() error"); } if(listen(serv_sock, 5) == -1){error_handling("listen() error");}pipe(fds);pid = fork();if(pid == 0){ // 子进程执行区域FILE* fp = fopen("echomsg.txt", "wt");char msgbuf[BUF_SIZE];int i, len;for(i = 0; i < 10; i++){len = read(fds[0], msgbuf, BUF_SIZE);fwrite((void*)msgbuf, 1, len, fp);}fclose(fp);return 0;}while(1){adr_sz = sizeof(clnt_adr);clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_adr, &adr_sz);if(clnt_sock == -1){continue;}else{puts("new client connected...");}pid = fork();if(pid == 0){close(serv_sock);while((str_len = read(clnt_sock, buf, BUF_SIZE)) != 0){write(clnt_sock, buf, str_len);write(fds[1], buf, str_len);}close(clnt_sock);puts("client disconnected...");return 0;}else{close(clnt_sock);}}close(serv_sock);return 0;}

http://www.15wanjia.com/news/54884.html

相关文章:

  • 黄岐建网站深圳网站seo公司
  • 四川泸州做网站的公司线上营销模式
  • 独立网站开发模板友链出售
  • 网络营销网站的功能东莞网站建设优化排名
  • 目前做美术的网站以及app制作网页一般多少钱
  • 怎么做cms网站谷歌收录提交入口
  • 有没有可以做翻译的网站吗一键制作免费网站的app
  • 做外贸的都有哪些网站成品网站货源1
  • 2017年做那家网站好杭州网站建设网页制作
  • 番禺网站建设公司排名安卓系统优化大师
  • 做本机网站seo优化外包公司
  • 网站建设的技术小程序推广的十种方式
  • 如何用ps做网站效果图推广哪个app最挣钱
  • 自己做的网站可以买东西吗国家高新技术企业
  • 网站建设公司擅自关闭客户网络百度站长链接提交
  • 有些中小网站百度seo关键词优化公司
  • 橙子建站广告怎么收费产品软文代写
  • 企业网页设计模板素材关键词优化公司哪家强
  • 网站制作有前途吗西安网络推广
  • 东乡做网站网络营销包括
  • 网站建设用啥技术百度电脑版下载
  • 门户网站标题居中加大谷歌广告推广怎么做
  • 制作企业网站的代码小程序开发软件
  • 台湾做系统集成的公司网站临沂seo
  • 免费拿项目做的网站论坛推广
  • 什么软件做美食视频网站114网址大全
  • 丹灶建网站温州seo网站推广
  • wap网站优化网络营销策略案例分析
  • css做网站常用台州百度关键词排名
  • 手机能进封禁网站的浏览器怎么看百度指数