خطأ التنفيذ السيئ (دورة نظام التشغيل) بحاجة إلى شرح
-
26-09-2019 - |
سؤال
كتبت في دفتر ملاحظاتي الكود أدناه وأكتبه الآن في Xcode وهذا هو الإخراج من قبل المعلم:
child reads : 0,1
parent write: 1,2
child reads : 1,2
parent write: 3,5
child reads : 3,5
parent write: 8,13
child reads : 8,13
لا يمكنني الحصول على الإخراج بسبب هذا الأخطاء 2:
1-برمجي استلم إشارة: "Exc_bad_access". وتمييز الخط a[0]
2-Warning: تمرير الوسيطة 1 من "الانتظار" يجعل المؤشر من عدد صحيح بدون طاقم
الرمز:
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#include <sys/wait.h>
int main (int argc, const char * argv[]) {
int shmid ,*a,*b,i;
shmid = shmget(IPC_PRIVATE, 2*sizeof(int), 0777/IPC_CREAT);
int pid = fork();
if (pid == 0) {
b=(int *)shmat(shmid, 0, 0);
for(i = 0; i < 10;i++){
sleep(1);
printf("child reads: %d,%d\n",b[0],b[1]);
}
}
else {
a= (int *)shmat(shmid, 0, 0);
a[0] = 0; //after compile this line marked in red
a[1] = 1;
for(i = 0; i <10;i++){
sleep(1);
a[0] = a[0] + a[1];
a[1] = a[0] + a[1];
printf("Parent write:%d,%d\n",a[0],a[1]);
}
wait(pid);//warning message above
}
return 0;
}
يمكن لأي شخص أن يفسر لماذا يحدث هذا؟
المحلول
0777/IPC_CREAT
يجب ان يكون 0777|IPC_CREAT
(منطقي أو ، وليس فجوة).
نصائح أخرى
للقضية مع wait
, ، نرى man waitpid
.
لا تنتمي إلى StackOverflow