Был протестирован следующий код :#define SEM_NAME "sem.sem"
int main(void)
{
sem_t sema;
sema=sem_open(SEM_NAME,O_RDWR|O_CREAT,S_IWUSR|S_IRGRP|S_IROTH,1);
...
sem_close(sema);
sem_unlink(SEM_NAME);
return 0;
}Реализация Posix. Компилится на ура. Но вот на вызове sem_open() вылетает segmentation fault. В чем же может быть дело?
>Был протестирован следующий код :
>
>#define SEM_NAME "sem.sem"
>
>int main(void)
>{
> sem_t sema;
> sema=sem_open(SEM_NAME,O_RDWR|O_CREAT,S_IWUSR|S_IRGRP|S_IROTH,1);
>...
> sem_close(sema);
> sem_unlink(SEM_NAME);
>return 0;
>}
>
>Реализация Posix. Компилится на ура. Но вот на вызове sem_open() вылетает segmentation
>fault. В чем же может быть дело?
sem_t *sem
Читайте внимательно man
Kstati i kompilirovat' sovetuju vsegda s -Wall kak minimum. V etom sluchae kompiljator sam vam skazhet gde potencial'naja problema.Uspehov
--- sas
>>Был протестирован следующий код :
>>
>>#define SEM_NAME "sem.sem"
>>
>>int main(void)
>>{
>> sem_t sema;
>> sema=sem_open(SEM_NAME,O_RDWR|O_CREAT,S_IWUSR|S_IRGRP|S_IROTH,1);
>>...
>> sem_close(sema);
>> sem_unlink(SEM_NAME);
>>return 0;
>>}
>>
>>Реализация Posix. Компилится на ура. Но вот на вызове sem_open() вылетает segmentation
>>fault. В чем же может быть дело?
>
>
>sem_t *sem
>Читайте внимательно man
>Kstati i kompilirovat' sovetuju vsegda s -Wall kak minimum. V etom sluchae
>kompiljator sam vam skazhet gde potencial'naja problema.
>
>Uspehov
>--- sas
Извиняюсь - описка вышла у меня sem_t* sema; иначе бы и скомпилить не дало бы.
>>>Был протестирован следующий код :
>>>
>>>#define SEM_NAME "sem.sem"
>>>
>>>int main(void)
>>>{
>>> sem_t sema;
>>> sema=sem_open(SEM_NAME,O_RDWR|O_CREAT,S_IWUSR|S_IRGRP|S_IROTH,1);
>>>...
>>> sem_close(sema);
>>> sem_unlink(SEM_NAME);
>>>return 0;
>>>}
>>>
>>>Реализация Posix. Компилится на ура. Но вот на вызове sem_open() вылетает segmentation
>>>fault. В чем же может быть дело?
>>
>>
>>sem_t *sem
>>Читайте внимательно man
>>Kstati i kompilirovat' sovetuju vsegda s -Wall kak minimum. V etom sluchae
>>kompiljator sam vam skazhet gde potencial'naja problema.
>>
>>Uspehov
>>--- sas
>
>
>Извиняюсь - описка вышла у меня sem_t* sema; иначе бы и скомпилить
>не дало бы.Nu togda sleduyschii sovet: Vsegda ispol'zujte proverki:
sema=sem_open(...);
if ( (sem_t*)SEM_FAILED == sema )
perror( "sem_open ERROR:" );Krome togo naskol'ko ya pomnju imja semaphora vsegda dolzhno nachinat'sja s '/'
"/sem.sem" or better "/tmp/sem.sem"
Udachi
--- sas
>>>>Был протестирован следующий код :
>>>>
>>>>#define SEM_NAME "sem.sem"
>>>>
>>>>int main(void)
>>>>{
>>>> sem_t sema;
>>>> sema=sem_open(SEM_NAME,O_RDWR|O_CREAT,S_IWUSR|S_IRGRP|S_IROTH,1);
>>>>...
>>>> sem_close(sema);
>>>> sem_unlink(SEM_NAME);
>>>>return 0;
>>>>}
>>>>
>>>>Реализация Posix. Компилится на ура. Но вот на вызове sem_open() вылетает segmentation
>>>>fault. В чем же может быть дело?
>>>
>>>
>>>sem_t *sem
>>>Читайте внимательно man
>>>Kstati i kompilirovat' sovetuju vsegda s -Wall kak minimum. V etom sluchae
>>>kompiljator sam vam skazhet gde potencial'naja problema.
>>>
>>>Uspehov
>>>--- sas
>>
>>
>>Извиняюсь - описка вышла у меня sem_t* sema; иначе бы и скомпилить
>>не дало бы.
>
>Nu togda sleduyschii sovet: Vsegda ispol'zujte proverki:
>
>sema=sem_open(...);
> if ( (sem_t*)SEM_FAILED == sema )
> perror( "sem_open ERROR:" );
>
>Krome togo naskol'ko ya pomnju imja semaphora vsegda dolzhno nachinat'sja s '/'
>
>
>"/sem.sem" or better "/tmp/sem.sem"
>
>Udachi
>--- sasи этот вариант я рассматривал со "/" - а именно "/tmp/sem" - одна фигня.
>>>>>Был протестирован следующий код :
>>>>>
>>>>>#define SEM_NAME "sem.sem"
>>>>>
>>>>>int main(void)
>>>>>{
>>>>> sem_t sema;
>>>>> sema=sem_open(SEM_NAME,O_RDWR|O_CREAT,S_IWUSR|S_IRGRP|S_IROTH,1);
>>>>>...
>>>>> sem_close(sema);
>>>>> sem_unlink(SEM_NAME);
>>>>>return 0;
>>>>>}
>>>>>
>>>>>Реализация Posix. Компилится на ура. Но вот на вызове sem_open() вылетает segmentation
>>>>>fault. В чем же может быть дело?
>>>>
>>>>
>>>>sem_t *sem
>>>>Читайте внимательно man
>>>>Kstati i kompilirovat' sovetuju vsegda s -Wall kak minimum. V etom sluchae
>>>>kompiljator sam vam skazhet gde potencial'naja problema.
>>>>
>>>>Uspehov
>>>>--- sas
>>>
>>>
>>>Извиняюсь - описка вышла у меня sem_t* sema; иначе бы и скомпилить
>>>не дало бы.
>>
>>Nu togda sleduyschii sovet: Vsegda ispol'zujte proverki:
>>
>>sema=sem_open(...);
>> if ( (sem_t*)SEM_FAILED == sema )
>> perror( "sem_open ERROR:" );
>>
>>Krome togo naskol'ko ya pomnju imja semaphora vsegda dolzhno nachinat'sja s '/'
>>
>>
>>"/sem.sem" or better "/tmp/sem.sem"
>>
>>Udachi
>>--- sas
>
>и этот вариант я рассматривал со "/" - а именно "/tmp/sem" -
>одна фигня.
A proverochka to est'?Udachi
--- sas
>Krome togo naskol'ko ya pomnju imja semaphora vsegda dolzhno nachinat'sja s '/'
>
>
>"/sem.sem" or better "/tmp/sem.sem"На правах добавления.
Вопрошавшему man 3 sem_open, раздел BUGS:
This implementation places strict requirements on the value of name: it
must begin with a slash (`/'), contain no other slash characters, and be
less than 14 characters in length not including the terminating null
character.
>>Krome togo naskol'ko ya pomnju imja semaphora vsegda dolzhno nachinat'sja s '/'
>>
>>
>>"/sem.sem" or better "/tmp/sem.sem"
>
>На правах добавления.
>
>Вопрошавшему man 3 sem_open, раздел BUGS:
>
>This implementation places strict requirements on the value of name: it
>must begin with a slash (`/'), contain no other slash characters, and
>be
>less than 14 characters in length not including the terminating null
>character.Если я правильно помню - то есть реализация функции px_ipc_name или очень похоже на это - на вскидку точно не скажу,не помню ;) так вот я ее использовал - она как раз и добавляет и проверяет наличие "/" в начале имени. Так что проблема совсем не в этом - требования относительно имени были соблюдены.
>>Krome togo naskol'ko ya pomnju imja semaphora vsegda dolzhno nachinat'sja s '/'
>>
>>
>>"/sem.sem" or better "/tmp/sem.sem"
>
>На правах добавления.
>
>Вопрошавшему man 3 sem_open, раздел BUGS:
>
>This implementation places strict requirements on the value of name: it
>must begin with a slash (`/'), contain no other slash characters, and
>be
>less than 14 characters in length not including the terminating null
>character.
Intertesno. A kakja u Vas sistema?On Fedora 3 64bit Heidelberg:
====================
The name argument points to a string naming a semaphore object. It is
unspecified whether the name appears in the file system and is visible
to functions that take pathnames as arguments. The name argument con-
forms to the construction rules for a pathname. If name begins with
the slash character, then processes calling sem_open() with the same
value of name shall refer to the same semaphore object, as long as
that name has not been removed. If name does not begin with the slash
character, the effect is implementation-defined. The interpretation of
slash characters other than the leading slash character in name is
implementation-defined.
On MAC OS X 1.4.2
==================
nothing specific about name even nothing about '/' :(~~~~~~~~~~~~~~~~~~~~~~~~~~~
I think that the problem is because for some reason sem_open fails and all operations with resulted sema pointer after this are causing segmentation fault. perror should help to understand what is causing that.Good luck
--- sas
>>>Krome togo naskol'ko ya pomnju imja semaphora vsegda dolzhno nachinat'sja s '/'
>>>
>>>
>>>"/sem.sem" or better "/tmp/sem.sem"
>>
>>На правах добавления.
>>
>>Вопрошавшему man 3 sem_open, раздел BUGS:
>>
>>This implementation places strict requirements on the value of name: it
>>must begin with a slash (`/'), contain no other slash characters, and
>>be
>>less than 14 characters in length not including the terminating null
>>character.
>
>
>Intertesno. A kakja u Vas sistema?
>
>On Fedora 3 64bit Heidelberg:
>====================
> The name argument points to
>a string naming a semaphore object. It is
> unspecified whether the name appears
>in the file system and is visible
> to functions that take pathnames
>as arguments. The name argument con-
> forms to the construction rules
>for a pathname. If name begins with
> the slash character,
>then processes calling sem_open() with the same
> value of name shall refer
>to the same semaphore object, as long
>as
> that name has not
>been removed. If name does not begin with the slash
> character, the effect is implementation-defined.
>The interpretation of
> slash characters other
> than the leading slash character in name is
> implementation-defined.
>
>On MAC OS X 1.4.2
>==================
>nothing specific about name even nothing about '/' :(
>
>~~~~~~~~~~~~~~~~~~~~~~~~~~~
>I think that the problem is because for some reason sem_open fails
>and all operations with resulted sema pointer after this are causing
>segmentation fault. perror should help to understand what is causing that.
>
>
>Good luck
>--- sas
GCC: (GNU) 3.3.3 [FreeBSD] 20031106 - это если интересует моя система(выдрано из elf'а)
>Intertesno. A kakja u Vas sistema?
http://www.freebsd.org/cgi/man.cgi?query=sem_open&apropos=0&...Собственно в SUBJ'e указана.
>Реализация Posix. Компилится на ура. Но вот на вызове sem_open() вылетает segmentation
>fault. В чем же может быть дело?какое точно сообщение пишется? Случайно не bad system call?
Попробуйте включить в ядро поддержку P1003_1B_SEMAPHORES.