У меня есть эти две простые программы, использующие общую память в linux.
Клиент данных:
FILE *fp;
fp = fopen("mem.share", "r");
if (fp<=0){
cout<<"Error, cannot open memory link file"<<endl;
return -1;
}
int shmid;
fscanf (fp, "%d", &shmid);
fprintf(fp, "%d", shmid);
fclose(fp);
cout<<"Using the file share index #"<<shmid<<endl;
uint8_t* buffer = (uint8_t*)shmat(shmid, NULL, 0);
if (buffer<=0){
cout<<"Error, cannot link memory"<<endl;
return -1;
}
Поставщик данных:
int shmid = shmget(IPC_PRIVATE, 140, 0666);
FILE *fp;
fp = fopen("mem.share", "w+");
fprintf(fp, "%d", shmid);
fclose(fp);
Я запускаю эти две программы в этой системе, без проблем:
Armbian Buster with Linux 5.3.9-sunxi
/etc/os-release:
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
Но, когда я попытался запустить программы в этой системе:
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
Я получил такой результат:
Using the file share index #524304
outstation: pthread_mutex_lock.c:81: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.
Aborted
Это общая память в двух системах (с использованием ipcs -m) Armbian:
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 0 alfa 666 140 0
0x00000000 1 alfa 666 140 0
0x00000000 2 alfa 666 140 0
0x00000000 3 alfa 666 140 0
0x00000000 4 alfa 666 140 0
0x00000000 5 alfa 666 140 0
0x00000000 6 alfa 666 140 0
0x00000000 7 alfa 666 140 0
Raspbian:
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 0 root 666 140 0
0x00000000 32769 pi 666 140 0
0x00000000 65538 pi 666 140 0
0x00000000 98307 pi 666 140 0
0x00000000 131076 pi 666 140 0
0x00000000 163845 pi 666 140 0
0x00000000 196614 pi 666 140 0
0x00000000 229383 pi 666 140 0
0x00000000 262152 pi 666 140 0
0x00000000 294921 pi 666 140 0
0x00000000 327690 pi 666 140 0
0x00000000 360459 pi 666 140 0
0x00000000 393228 pi 666 140 0
0x00000000 425997 pi 666 140 0
0x00000000 458766 pi 666 140 0
0x00000000 491535 pi 666 140 0
0x00000000 524304 pi 666 140 0
Может кто-нибудь помочь мне чтобы понять что я делаю не так? В чем разница между этими двумя системами?
Спасибо!