[Volgograd] shm
kordv
kordv на vng.com.ru
Пн Окт 13 15:17:38 MSD 2003
Serge S. Fukanchik wrote:
>
>>то перестаёт работать, хотя программа не ставила на область SHM_DEST.
>
> У меня работает, и в RH73 и в RH90. Ядра соответственно 2.4.18 и 2.4.20.
> Я напечатал значение поля mode сразу после создания области - оно равно 0666.
> Попробуй и ты распечатать его, какое значение будет у тебя?
>
Запускал на 2.4.22:
parent id=35ed0005
shmctl err=0
SHM mode=0666
parent ptr=0x40138000
shmctl err=0
SHM mode=0666
detach err=0
shmctl err=-1
child id=35ed0005
child ptr=0xffffffff
На 2.4.20:
parent id=8001
shmctl err=0
SHM mode=0666
parent ptr=0x40138000
shmctl err=0
SHM mode=0666
detach err=0
shmctl err=0
SHM mode=0666
child id=8001
child ptr=0x40138000
Вот такая история. А раньше не подумал бы, что в новом ядре плохо
работает то,
что в старом работало нормально (наверно у меня проявилась инерция мышления,
вот и тормозил).
--
Akkord
V-LUG team
----------- следущая часть -----------
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int shm_mode(int id, struct shmid_ds *dsp)
{
int err;
struct shmid_ds sds;
err = shmctl ( id, IPC_STAT, &sds );
printf ( "shmctl err=%i\n", err );
if ( !err ) printf ( "SHM mode=0%o\n", sds.shm_perm.mode );
}
int main( int argc, char *argv[])
{
int id;
void *ptr;
int status;
id = shmget ( 0x0103018d, 0x000f4240, 950 );
printf ( "parent id=%x\n", id );
shm_mode ( id );
ptr = shmat ( id, 0, 0 );
printf ( "parent ptr=%p\n", ptr );
shm_mode ( id );
printf ( "detach err=%i\n", shmdt ( ptr ) );
shm_mode ( id );
if ( !vfork () )
{
char sid[256];
char *args[3];
sprintf ( sid, "%d", id );
args[0]="./chld";
args[1]=sid;
args[2]=0;
execve ( "./chld", args, 0 );
perror ( "execve" );
return 0;
}
wait (&status);
return 0;
}
Подробная информация о списке рассылки Volgograd