欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Linux進程間如何通信

這篇文章主要介紹“Linux進程間如何通信”,在日常操作中,相信很多人在Linux進程間如何通信問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Linux進程間如何通信”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、成都做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元天柱做網(wǎng)站,已為上家服務(wù),為天柱各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792

題目如下:

“父進程從鍵盤上接受1000個數(shù)據(jù),對其求和sum1,子進程對這1000個數(shù)平方和sum2,結(jié)果傳給父進程,父進程將sum1+sum2后,打印結(jié)果。”

要求:用大小為10的共享區(qū)傳遞1000個數(shù)據(jù);子進程用消息機制將sum2傳給父進程。 

主要利用共享內(nèi)存實現(xiàn)進程間通信,使用管道實現(xiàn)進程間競爭關(guān)系,freebsd下測試通過。代碼如下:時間有限,有可能有些不足,希望高手給予指點。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/shm.h>
#include <signal.h>

const int key = 0x12345678;
static int pfd1[2], pfd2[2];

#define shm_len (10*1024)
#define val_num 5

int init_shm() {
 int shmid = -1;

 shmid = shmget((key_t)key, shm_len, 0666 | ipc_creat);
 if (shmid < 0) {
  printf("shmget failed!\n");
  exit(-1);
 }

 return shmid;
}

void cancel_shm(int shmid) {
 if (shmctl(shmid, ipc_rmid, 0) == -1) {
  printf("shmctl failed!\n");
  exit(-1);
 } 
 printf("cancel_shm successfully!\n");
}

void *shm_get(int shmid) {
 void *mem = null;

 mem = shmat(shmid, 0, 0);
 if (mem == (void *)-1) {
  printf("shmat failed!\n");
  exit(-1);
 }

 return mem;
}

int get_val(int *val, int num) {
 int i;
 for (i = 0; i < num; i++) {
  printf("please input a num:");
  scanf("%d", val + i);
 }
}
void show_val (int *val, int num) {
 int i;
 for (i = 0; i < num; i++) {
  printf("%d\t", *(val + i));
 }
 printf("\n");
}

int add_val (int *val, int num) {
 int result = 0;
 int i;
 
 for (i = 0; i < num; i++) {
  result += *(val + i);
 }

 return result;
}

int square_val (int *val, int num) {
 int result = 0;
 int i, tmp;

 for (i = 0; i < num; i++) {
  tmp = *(val + i);
  result += (tmp * tmp);
 }

 return result;
}

void tell_wait (void) {
 if (pipe(pfd1) < 0 || pipe(pfd2) < 0) {
  printf("pipe error!\n");
  exit(-1);
 }
}

void tell_parent (pid_t pid) {
 if (write(pfd2[1], "c", 1) != 1) {
  printf("write error!\n");
  exit(-1);
 }
}

void wait_parent (void) {
 char c;

 if (read(pfd1[0], &c, 1) != 1) {
  printf("read error!\n");
  exit(-1);
 }
}

void tell_child (pid_t pid) {
 if (write(pfd1[1], "p", 1) != 1) {
  printf("write error!\n");
  exit(-1);
 }
}

void wait_child (void) {
 char c;

 if (read(pfd2[0], &c, 1) != 1) {
  printf("read error!\n");
  exit(-1);
 }
}

int main(int argc, char *argv[]) {
 void *mem = null;
 int shmid = -1;
 pid_t pid = -1;
 int val[val_num];
 int result = 0;

 shmid = init_shm();
 
 tell_wait();
 if ((pid = fork()) < 0) {  //error
  printf("fork error!\n"); 
  exit(-1);
 } else if (pid == 0) {   //child
  int result = 0;

  wait_parent();

  mem = shm_get(shmid);  //get share memery

  memcpy(val, mem, sizeof(int) * val_num);
  result = square_val(val, val_num); 

  *(int *)((void *)mem + shm_len - 4) = result;

  tell_parent(pid);

  exit(1);
 } else {      //parent
  int child_result = 0;

  mem = shm_get(shmid);  //get share memery
  get_val(val, val_num);  //get user input
  memcpy(mem, val, sizeof(int) * val_num); //copy user input to share memery

  tell_child(pid);

  result = add_val(val, val_num);

  wait_child();
  child_result = *(int *)((void *)mem + shm_len - 4);
  printf("result:%d, child_result:%d, all:%d\n", result, child_result, result + child_result);
 }

 cancel_shm(shmid);

 return 0;
}

到此,關(guān)于“Linux進程間如何通信”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

新聞名稱:Linux進程間如何通信
標(biāo)題URL:http://aaarwkj.com/article0/gpepoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、虛擬主機外貿(mào)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、用戶體驗、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
精品一区二区三区高清| 亚洲国产传媒在线观看| 蜜桃网站视频免费观看| 国产精品—色哟哟视频| 亚洲成人av福利网站| 日本一区欧美二区精品| 国产高潮精品呻吟久久av| 少妇高潮惨叫久久麻豆传| 亚洲一区二区三区伊人| 亚洲日本香蕉视频观看视频| 久久久亚洲精品中文字幕蜜桃| 国产精品高清另类一区二区三区| 四虎免费在线视频观看| 亚洲综合一区二区三区不卡| 亚洲第一青青草原在线| 成人精品亚洲一区二区| 国产精品视频一区二区久久| 性生活视频在线观看免费| 自拍偷拍亚洲精品偷一| 9热在线视频精品这里只有| 亚洲av毛片免费在线观看| 国产美女口爆吞精久久| 少妇按摩高潮呻吟av| 一区不卡在线视频免费国产 | 欧美日韩一区二区三区大片| 人妻少妇被猛烈进入中文字幕91| 亚洲欧美日韩一区91| 欧美十八一区二区三区| 日本福利写真在线观看| 日本高清精品视频免费| 中文字幕久久亚洲一区| 高清大片免费看一区二区| 综合激情四射亚洲激情| 91九色在线porny| 中文字幕制服国产精品| 免费观看亚洲视频一区二区三区| av免费在线观看麻豆| 声入人心第一季在线观看| 少妇高潮喷水下面的水| 97在线观看视频免费| 亚洲成人影院中文字幕|