为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 98
学习任务

别摸我的键盘 的学生作业:

read.c #include #include #include #include #include #include #define BUF_SIZE 64 #define PATHNAME "." #define PRO_ID 100 #define SZ 256 int main(int argc, const char *argv[]) { if (argc != 2) { fprintf(stderr, "Usage %s \n",argv[0]); return -1; } key_t key; int shmid,ret; void *addr = NULL; key = ftok(PATHNAME,PRO_ID); if(key == -1){ perror("[ERROR] key(): "); exit(EXIT_FAILURE); } shmid = shmget(key,SZ,IPC_CREAT|0666); if(shmid == -1){ perror("shmid(): "); exit(EXIT_FAILURE); } addr = shmat(shmid, NULL, 0); FILE *f_s = fopen(argv[1], "r"); if (NULL == f_s) { perror("Error source Fopen():"); return -1; } char buf[BUF_SIZE] = {0}; int idx = 0; size_t s_t_w; while ((s_t_w = fread(buf, sizeof(char), BUF_SIZE, f_s)) > 0) { memcpy((char *)addr + idx, buf, s_t_w); idx += s_t_w; } if (idx < SZ) { ((char *)addr)[idx] = '\0'; } printf("share memory content is %s \n", addr); fclose(f_s); shmdt(addr); if (ret == -1) { perror("shmdt(): "); return -1; } return 0; } write.c #include #include #include #include #include #include #define BUF_SIZE 64 #define PATHNAME "." #define PRO_ID 100 #define SZ 256 int main(int argc, const char *argv[]) { if (argc != 2) { fprintf(stderr, "Usage %s \n",argv[0]); return -1; } key_t key; int shmid,ret; void *addr = NULL; key = ftok(PATHNAME,PRO_ID); if(key == -1){ perror("[ERROR] key(): "); exit(EXIT_FAILURE); } shmid = shmget(key,SZ,IPC_CREAT|0666); if(shmid == -1){ perror("shmid(): "); exit(EXIT_FAILURE); } addr = shmat(shmid, NULL, 0); FILE *f_w = fopen(argv[1], "w+"); if (NULL == f_w) { perror("Error target Fopen():"); return -1; } //int len = strlen(addr); char buf[SZ] = {0}; int idx = 0; size_t s_t_w; memcpy(buf, addr, SZ); fwrite(buf, sizeof(char), strlen(buf), f_w); fclose(f_w); shmdt(addr); shmctl(shmid,IPC_RMID,NULL); if (ret == -1) { perror("shmdt(): "); return -1; } return 0; }

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号