黑馬《linux系統程式設計》學習筆記(從46到50)
阿新 • • 發佈:2018-12-29
四十六. 沒有血緣關係的程序間通訊_mmap
mmap_r_ipc.c
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/wait.h> #include <string.h> #include <sys/mman.h> #include <fcntl.h> int main(int argc, const char* argv[]) { int fd = open("temp",O_RDWR | O_CREAT, 0664); fruncate(fd,4096); int len = lseek(fd,0,SEEK_END); //建立匿名記憶體對映區 void * ptr = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if(ptr == MAP_FAILED) { perror("mmap error"); exit(1); } while(1) { sleep(1); printf("%s\n",(char*)ptr + 1024); } //釋放 int ret = munmap(ptr, len); if(ret == -1) { perror("munmap error"); exit(1); } return 0; }
mmap_w_ipc.c
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/wait.h> #include <string.h> #include <sys/mman.h> #include <fcntl.h> int main(int argc, const char* argv[]) { int fd = open("temp",O_RDWR | O_CREAT, 0664); //建立匿名記憶體對映區 int len = 4096; //注意這裡的引數的變化, void * ptr = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if(ptr == MAP_FAILED) { perror("mmap error"); exit(1); } while(1) { char* p = (char*)ptr; p += 1024; strcpy(p,"hello parent, i am your friend!!\n"); sleep(2); } //釋放 int ret = munmap(ptr, len); if(ret == -1) { perror("munmap error"); exit(1); } return 0; }
四十七. 訊號知識點概述
四十八. 管道複習
四十九. 訊號的介紹
五十. 阻塞訊號集和未解訊號集的概念