void main(int argc, char* argv[]) { SHM_FD fd,fd1; shm_init(SHM_PULL_MODEL); do{ fd= shm_chn_attach(3); sleep(1); }while(-1== fd); SHARE_BUF_NODE *r_tmp; r_tmp= malloc(sizeof(SHARE_BUF_NODE)); if(argc< 2){ printf("usage: test_pull filename!\n"); } FILE* file_fd;//output file path ssize_t wr_size;//write size file_fd= fopen(argv[1], "wb");//open output file if(NULL== file_fd){ printf("file open error!\n"); return; } while(1) { int handle= shm_pull(fd, r_tmp);//pull data from shm channel wr_size= fwrite(r_tmp->share_pt, 1, r_tmp->share_size, file_fd);//write data to output file if(-1== wr_size){ printf("write error!\n"); return ; } // printf("share mem buffer size is %d\n",r_tmp->share_size); shm_release(handle); if(5000!= wr_size){ fclose(file_fd); return; } } }
int syscall_shm_pull(int shmid, unsigned int pagenum, void *addr) { if((unsigned long)addr < CFG_MEM_KERNELMAX) return ERRNO_NOTEXIST; return shm_pull(shmid, pagenum, addr); }