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

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)化排名
国产成人公开免费视频| 免费又色又爽无遮挡网站| 91伊人手机在线观看| 粗暴蹂躏中文一区二区三区| 午夜看片福利欧美熟女| 国产成人精品免费视频大| 欧美精品在,欧美一区二区| 国产大神91一区二区三区| 美女丝袜诱惑国产在线观看| 亚洲免费av一区二区| 青青草免费公开视频久久| 91熟女成人精品一区二区| 亚洲视频一直看一直爽| 久久精品亚洲夜色国产av| 一区二区三区视频免费观看| 天天操夜夜操狠狠操91| 五月婷婷丁香花综合网| 日韩一级免费高清黄片| 未满十八禁止在线观看av| 国产综合一区二区三区视频| av在线免费观看青青草原| 99精品国产中文字幕| 蜜桃精品一区二区三区在线观看| 夫妻性生活免费的视频| 这里只有精品国产999| 午夜福利视频在线观看| 婷婷六月开心激情五月| 午夜性色福利视频你懂的| 中文字幕丰满人妻不满中出片| 午夜视频在线观看黄片| 热99精品视频在线观看| 免费看夫妻性生活视频| 91口爆吞精国产对白| 熟女一区二区中文字幕| 亚洲一区二区三区香蕉不卡| 91精品婷婷国产综合| 久久精品人妻少妇一区二区| 女同三人按摩高潮喷出| 欧美日本在线区一区二| 国产熟乱老女人露脸视频| 亚洲欧美丝袜清纯另类|