LINUX.ORG.RU
ФорумTalks

Почему семафоры не являются объектами файловой системы?


0

0

Пайпы, например, являются. Почему семафоры нет? Они бы сделали ненужным такой маразм как .lock-файлы. Писать и читать в файлы-семафоры бессмысленно, но можно открывать и ждать/обламываться, в том числе и из скриптов.
Выглядеть это должно примерно так:
вызов mksem [--value число] имя...
вызов open(,"w") или в shell [n]<имя блокирует вызов до освобождения семафора
вызов open(,"r") или в shell [n]>имя возвращает ошибку, если семафор занят
вызов close() естественно освобождает семафор.
ИМХО, понятный и полезный интерфейс. Почему так не сделали?

★★★★★

а потом какая нибудь левая программа попытается открыть твой заблокированный "семафорный файл" и повиснет :)

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

Левая программа тебе rm -rf ~ сделает. В этом отношении, имхо, mknod, mksock и mkfifo ничем не отличаются.

legolegs ★★★★★
() автор топика

А если программа выставила семафор и подохла, как его закрыть?

Lock файл я могу и удалить руками.

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

>А если программа выставила семафор и подохла, как его закрыть?

Как и во всех остальных случаях, всё закрывается само.

PS Семафоры (именованные) сейчас являются глобальными объектами.

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

>Lock файл я могу и удалить руками.

А как ты пользуешься локами?

[ -e /var/lock/sin_a.lock ] && exit 1

touch /var/lock/sin_a.lock

Так? А о race condition ты слышал?

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

>man 1 flock

Блин, не знал. Спасибо. Ладно, частный вопрос со скриптами закрыт. Остался общий: почему семафоры не являются объектами файловой системы как fifo и прочее?

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

> почему семафоры не являются объектами файловой системы как fifo и прочее?

Потому что их реализовывал другой отдел.

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

>> Потому что их реализовывал другой отдел.

> Microsoft Synchronization Lab?

Indian Hill Facility.

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

> Остался общий: почему семафоры не являются объектами файловой системы как fifo и прочее?

Мне почему-то кажется, что на этом форуме нету людей, которые разрабатывали семафоры SystemV и/или POSIX. Такой ответ тебя удовлетворит?

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

> Ээээ?? А что же тогда появляется в /dev/shm/?

Есть XSI-семафоры и realtime-семафоры. Тот факт, что вторые живут в /dev/shm и что они представлены именно файлами - особенности реализации (glibc), их могло бы там и не быть. А первые и вовсе никаким ls'ом не увидишь.

const86 ★★★★★
()

> Пайпы, например, являются. Почему семафоры нет?

Интерфейс XSI (aka SysV IPC) вообще выглядит как-то "не так". Похоже, его и правда разрабатывал какой-то другой отдел :)

В довесок можно спросить: а почему сетевые интерфейсы не являются файлами? В некоторых ОС являются, но от этого не легче. Общение с интерфейсом всё равно идёт через фиктивный сокет, а не через read/write/ioctl девайса.

С другой стороны, перегибать палку тоже не надо. Вот например: UNIX-сокеты являются файлами (необязательно). А зачем??

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

> Чтобы права на них ставит и читать-писать через coreutils, дурилка.

Это про UNIX-сокеты? Нехорошо я выразился... Читать-писать в сокет, как в файл - это конечно здорово. Парадокс в том, что сокеты живут на файловой системе, то бишь на диске. И сокет остаётся жить даже после завершения процесса, который его слушал. Хотя единственное разумное, что с ним можно сделать тогда - unlink. В общем, я не хочу сказать, что это совсем плохая идея, но какая-то недодуманность просматривается.

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

>какая-то недодуманность просматривается.

Да, но с другой стороны если создавать именованные объекты в некотором "астрале" (как в оффтопике), то для операций с ними (в частности для контроля доступа) приходится вводить дополнительные велосипедистые системные вызовы.

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

> Блин, не знал. Спасибо. Ладно, частный вопрос со скриптами закрыт.

только flock(1) нестандартный. В БСД его место занимает shlock(1)

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

> Блджад, почему нельзя было уже стандартизировать хотя бы это?

К сожалению, и в посиксе есть белые пятна. Вот например, утилита setsid, которая есть в пакете util-linux. Да ещё море примеров можно вспомнить...

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