[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