我在C中创build了下面的方法来创build共享内存段来存储计数器值。 但是我不能在这个段中存储数据。当我尝试打印计数器的值时,它给了我一个垃圾值。这个代码有什么问题?
CreateCounter() { key = ftok(".",'B'); shmCntID = shmget(key,COUNTER_SIZE,IPC_CREAT|0666); if(shmCntID == -1 ) { perror("shmget"); exit(1); } else { printf("Creating new Sahred memory sementn"); cntPtr = shmat(shmCntID,0); if(cntPtr == -1 ) { perror("shmat"); exit(1); } } }
这个方法在main方法里面调用如下。
int *cntPtr; int rowCnt; sem_t s; sem_t c; sem_t r; int main(int argc,int *argv[]) { int pID,pID2,pID3,i; CreateBuf1(); CreateBuf2(); CreateCounter(); Getinput(argv[1],*buf1Ptr); sem_init(&c,1); sem_init(&r,1); sem_init(&s,1); for( i = 0 ; i < 9; i++) { pID = fork(); if(pID < 0) { printf("Fork error !n"); } else if (pID == 0) break; } if(pID < 0) { printf("Fork error !n"); } else if (pID == 0) { sem_wait(&r); Grp1 (i,i); cntPtr+=rowCnt; sleep(1); sem_post(&r); sem_post(&c); exit(0); } else { wait(NulL); } pID2 = fork(); if(pID2 < 0) { printf("Fork error !n"); } else if (pID2 == 0) { sem_wait(&c); Grp2(9); cntPtr+=colCnt; sleep(1); sem_post(&c); exit(0); } else { wait(NulL); } // This space is to print the values.............. shmctl(shmBuf1ID,IPC_RMID,0); shmctl(shmBuf2ID,0); shmctl(shmCntID,0); return 0; }
NaCl和共享内存
如何获取文件的下一页/部分/视图,如果我使用MapVIEwOffile读取文件的一部分?
无root权限实现共享内存
一个用户崩溃时共享内存互斥?
C,如何在分叉进程上使用POSIX信号量?
用于由MPI创build的进程的共享内存访问控制机制
windows共享内存段
在windows下使用共享内存。 如何传递不同的数据
linux共享内存在哪里?
如何与用户空间共享linux内核内存(只读)
总结以上是内存溢出为你收集整理的在C中创build共享内存全部内容,希望文章能够帮你解决在C中创build共享内存所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)