LINUX.ORG.RU
Ответ на: комментарий от Manhunt

Отсутствие альтернатив не делает их менее уродскими

... но делает бессмысленным желание их похоронить.

unsigned ★★★★
()
Ответ на: комментарий от Deleted

Неконсистентные, плохо продуманные. Историческое нагромождение костылей, возведенное в ранк закона.

Manhunt ★★★★★
()
Ответ на: комментарий от Deleted

Примеры того, что там сделано глобально неправильно? Из того, что не является легаси.

Да там же повсюду гонки, неадекватно слабые гарантии, невнятные формулировки.

[POSIX] Гонка при отправке kill
http://lwn.net/Articles/323248/

Manhunt ★★★★★
()
Ответ на: комментарий от Deleted

Вот тебе еще: http://pubs.opengroup.org/onlinepubs/000095399/functions/close.html

If close() is interrupted by a signal that is to be caught, it shall return -1 with errno set to [EINTR] and the state of fildes is unspecified.


Ну и как этим ГОВНИЩЕМ пользоваться в многопоточной среде, когда у меня файлы активно открываются-закрываются в разных потоках?! Как избежать утечки дескрипторов? НЕНАВИСТЬ!!!!!1

Manhunt ★★★★★
()
Ответ на: комментарий от ms-dos32

Тебе осталось выбрать из этого списка правильных самый-самый :)

slackwarrior ★★★★★
()
Ответ на: комментарий от Manhunt

блочь сигналы на время вызова или пробуй закрыть еще раз при EINTR. И да, как правило «unspecified» отличается от «undefined» тем, что в конкретной реализации поведение известно.

Pavval ★★★★★
() автор топика
Ответ на: комментарий от Manhunt

у меня файлы активно открываются-закрываются в разных потоках

Ну и как этим ГОВНИЩЕМ пользоваться в многопоточной среде?

FIXED

slackwarrior ★★★★★
()
Ответ на: комментарий от Pavval

P.S. fclose(3) этим не страдает. Можно 1. юзать его, или 2. поглядеть в glibc как это разруливается.

Pavval ★★★★★
() автор топика
Ответ на: комментарий от Manhunt

Как избежать утечки дескрипторов?

Ну использование сигналов в многонитевых программах само по себе неразумно.

tailgunner ★★★★★
()
Ответ на: комментарий от Pavval

пробуй закрыть еще раз при EINTR

Это может привести к закрытию файла в другой нити (если при EINTR дескриптор всё же закрывается, и в это время другая нить открывает файл).

tailgunner ★★★★★
()
Ответ на: комментарий от Pavval

блочь сигналы на время вызова

Ты хотел сказать, «игнорируй»? Мне обрабатывать их нужно, поэтому блочить нельзя. И объясни, нахрена нужен API с поведением в духе «если вам не посчастливилось, и мы вернули EINTR, то вы в полной жопе»?!

fclose(3) этим не страдает

Предлагаешь вместо close всегда делать «fdopen + fclose»? Охрененная система костылей и подпорок вокруг этого вашего сраного POSIX: вместо простого закрытия дескриптора подрочим malloc. А что мне делать, если мой дескриптор не проходит входные проверки fdopen на тип файла?

поглядеть в glibc как это разруливается.

А как же портабельность?

Ты вдумайся, оцени глубину маразма: в сраном юниксе, которой весь построен вокруг концепции файла, невозможно корректно делать элементарнейшие (!) операции с этими самыми файлами.

Manhunt ★★★★★
()
Ответ на: комментарий от Pavval

пробуй закрыть еще раз при EINTR

Так нельзя, в linux close() всегда закрывает дескриптор, если вызвать close() еще раз, можно случайно закрыть дескриптор использующийся другим потоком.

AptGet ★★★
()
Ответ на: комментарий от Manhunt

А как же портабельность?

Это превратно понятая портабельность. Ее из коробки не бывает, пока кто-то не озаботится собственно портабельностью (и да: не бывает абсолютной портабельности - бывает разумная и достаточная). Если до тебя не озаботились, а тебе нужно - запили, быстро 5.1! Или сделай лучше, или пляж для тебя закрыт - возможны психосоматические травмы нижних отделов ЖКТ. (Видимо, уже - судя по количеству «сраной» драмы ITT)

slackwarrior ★★★★★
()
Ответ на: комментарий от Pavval

И да, как правило «unspecified» отличается от «undefined» тем, что в конкретной реализации поведение известно.

Когда в конкретной реализации поведение должно быть известно, пишут «implementation-defined». http://ru.wikipedia.org/wiki/Неуточняемое_поведение

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Почитай стандарты языков. Там «undefined» - это всё, что угодно, без необходимости описывать какое-то конкретное поведение (в том числе креш, порча данных и т.д.). А «unspecified» - это не определенное в стандарте поведение, которое должно быть определено и задокументировано в каждой реализации.

Pavval ★★★★★
() автор топика
Ответ на: комментарий от Pavval

Почитай

Я ж тебе ссылку привел, где подробно разжевано, в чем разница между unspecified и implementation-defined. Ты прочитал?

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Я ошибся. Перепутал.

Сейчас из интереса курю fclose() из glibc.

Pavval ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.