Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 17 января 2011< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Вики -- http://gdsfh.dyndns.org/kamlo/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+3
[00:05:25] <ermine> а как на камле разворачивать вилдкарды file_*.ml в командной строке?
[00:06:27] <ygrek> чтобы по всем правилам -> нужен биндинг к glob - по-моему есть в core
[00:06:54] <ygrek> а так можно и через readdir + scanf
[00:07:47] <ermine> а как в сканфе звездочка матчится?
[00:08:29] <ermine> на уме только pcre с pmatch и поставить точку перед звездочкой и отключить greedy
[00:08:33] gds вышел(а) из комнаты
[00:08:51] <ermine> таки пора цпать
[00:09:37] <ermine> камлевый Arg умеет только собирать файлы перечисленные в строке
[00:12:39] <ygrek> http://docs.camlcity.org/docs/godipkg/3.11?q=glob
[00:14:43] <ermine> лень ставить всякие либлы
[00:43:43] komar вышел(а) из комнаты
[00:45:45] komar вошёл(а) в комнату
[00:51:37] ygrek вышел(а) из комнаты
[00:51:39] ygrek вошёл(а) в комнату
[01:16:14] ygrek вышел(а) из комнаты
[01:19:24] iNode вышел(а) из комнаты
[01:31:25] arhibot вошёл(а) в комнату
[01:38:46] ermine вышел(а) из комнаты
[01:57:32] arhibot вышел(а) из комнаты
[02:19:13] zert вышел(а) из комнаты
[02:47:46] komar вышел(а) из комнаты
[03:40:16] ftrvxmtrx вышел(а) из комнаты
[03:40:30] ftrvxmtrx вошёл(а) в комнату
[03:51:14] ftrvxmtrx вышел(а) из комнаты
[04:10:14] ftrvxmtrx вошёл(а) в комнату
[06:22:13] ftrvxmtrx вышел(а) из комнаты
[06:22:44] ftrvxmtrx вошёл(а) в комнату
[06:47:27] ftrvxmtrx вышел(а) из комнаты
[06:48:30] ftrvxmtrx вошёл(а) в комнату
[07:18:23] iNode вошёл(а) в комнату
[07:44:27] iNode вышел(а) из комнаты
[08:02:22] iNode вошёл(а) в комнату
[08:46:22] vshender вошёл(а) в комнату
[08:47:20] vshender вышел(а) из комнаты
[09:10:54] ftrvxmtrx вышел(а) из комнаты
[09:11:06] ftrvxmtrx вошёл(а) в комнату
[09:36:04] gds вошёл(а) в комнату
[10:54:56] Kakadu вошёл(а) в комнату
[10:55:02] Kakadu вышел(а) из комнаты
[10:59:09] Typhon вошёл(а) в комнату
[11:31:03] ermine вошёл(а) в комнату
[12:11:29] serp256 вошёл(а) в комнату
[12:11:47] ygrek вошёл(а) в комнату
[12:11:47] Typhon вышел(а) из комнаты
[12:12:01] ygrek вышел(а) из комнаты
[12:12:09] Typhon вошёл(а) в комнату
[12:19:41] zert вошёл(а) в комнату
[12:21:57] komar вошёл(а) в комнату
[12:48:30] komar вышел(а) из комнаты
[13:29:35] ftrvxmtrx вышел(а) из комнаты
[13:30:16] ftrvxmtrx вошёл(а) в комнату
[13:45:48] ftrvxmtrx вышел(а) из комнаты
[14:15:29] komar вошёл(а) в комнату
[14:23:13] Typhon вышел(а) из комнаты
[14:23:34] Typhon вошёл(а) в комнату
[14:45:26] Typhon вышел(а) из комнаты
[14:45:51] Typhon вошёл(а) в комнату
[17:19:12] Kakadu вошёл(а) в комнату
[17:48:03] iNode вышел(а) из комнаты
[18:44:51] serp256 вышел(а) из комнаты
[18:46:58] ftrvxmtrx вошёл(а) в комнату
[18:48:30] serp256 вошёл(а) в комнату
[19:22:19] serp256 вышел(а) из комнаты
[19:29:37] Kakadu вышел(а) из комнаты
[19:34:20] Typhon вышел(а) из комнаты
[20:33:05] vshender вошёл(а) в комнату
[21:40:39] komar вышел(а) из комнаты
[22:01:32] ak79 вошёл(а) в комнату
[22:11:06] arhibot вошёл(а) в комнату
[22:16:02] ftrvxmtrx вышел(а) из комнаты
[22:28:55] ermine вышел(а) из комнаты
[22:38:32] <gds> недопонимаю одну штуку.  Хочу через Unix.lockf ограничить работу с файлом так, чтобы с ним одновременно работал только один внешний процесс.  Если блокировать файл (регион = один байт в начале файла) на запись, затем запускать внешний процесс, подождать его завершения и затем отпустить блокировку, то вроде покатит?
Ещё засада в том, что не всегда этот файл есть, то есть, утилита иногда его создаёт, а иногда дописывает.  Если файла нет, невозможно заблокировать ни одного байта этого файла.
Может проще какие-нибудь лок-файлы создавать, O_WRONLY + O_EXCL, а после работы их удалять, и не париться с lockf?  Более дубовое решение.
[22:45:08] ermine вошёл(а) в комнату
[22:47:47] komar вошёл(а) в комнату
[23:27:27] <vshender> Подход с O_EXCL вполне работает, только нужно аккуратно его удалять, чтобы по сигналу даже если вылетаем или еще там чего.
[23:28:07] <vshender> Более того, многие так и делают.
[23:29:16] ygrek вошёл(а) в комнату
[23:32:22] <gds> о да, про аккуратное удаление -- факт.  С другой стороны, если убили по kill -9, получится как-то неудобно.  Или если ресет нажали.  Да, этот момент я не продумал.
[23:32:27] vshender вышел(а) из комнаты
[23:34:52] vshender вошёл(а) в комнату
[23:34:59] <gds> а может как-то совместить лок-файл и lockf?  Например, открывать лок-файл на запись, если он есть, и создавать, если его нет, и в случае создания писать туда 1 байт, который потом блокировать через Unix.lockf?  Какое-то чудовище франкенштейна получается...
[23:35:47] <vshender> Ну, дело в том, что если ресет, то файл уже не будет эксклюзивно открыт
[23:35:53] <vshender> насчет kill -9, думаю, тоже
[23:36:20] <vshender> Хм, хотя что-то я запутался...
[23:36:45] <vshender> вроде и по сигналу если умереть, проблемы тогда быть не должно, но подвох, помнится, был какой-то
[23:36:48] <gds> при ресете файл останется в файловой системе и его не получится открыть через O_EXCL, так как O_EXCL = "если файла нет, то создать, иначе фейл".
[23:37:02] <vshender> оупс, что-то туплю под вечер
[23:37:05] <vshender> Ты прав
[23:37:26] <vshender> тогда да, выходит блокировать кусок лок-файла..
[23:37:41] <vshender> если не пользоваться всякими dbus'ами, что, как кажется, делать не стоит
[23:37:58] <vshender> Вообще, наверное, загуглить нужно, точно обсуждалось сотни раз
[23:38:01] <vshender> уверен
[23:40:26] <vshender> There are several common techniques including using semaphores. The one I see used most often is to create a "pid lock file" on startup that contains the pid of the running process. If the file already exists when the program starts up, open it up and grab the pid inside, check to see if a process with that pid is running, if it is check the cmdline value in /proc/pid to see if it is an instance of your program, if it is then quit, otherwise overwrite the file with your pid. The usual name for the pid file is *application_name*.pid.
[23:41:00] <vshender> правда тут на /proc завязано, что моет не лучшее решение
[23:41:35] <gds> во, тоже про pid lock file нагуглил :)
[23:42:12] <vshender> Но вообще с блокировкой лучше в том, что и проще в итоге, и автоматически при смерти процесса отпускается.
[23:43:03] <gds> только вот не факт, что правильно -- есть промежуток времени между созданием файла и блокированием его байта, и не знаю, точно ли всё будет стопроцентно-рабочим.
[23:44:13] ygrek чат не читал, но осуждает -> http://0pointer.de/blog/projects/locking.html
[23:46:11] <vshender> gds: так блокирование атомарно: не важно, кто первым создаст файл, важно, кто первым заблокирует
[23:47:36] <gds> про блокирование понял, верно.
[23:48:53] <vshender> ygrek: пробежался по диагонали. Как понимаю, нужно обеспечивать именно запуск одной копии процесса, про потоки речь не идет. Проблем с NFS тоже можно не опасаться, ибо есть специальное место для таких дел: /var/lock, и если оно на NFS, то ССЗБ.
[23:50:23] <gds> а про блокировки почитал и вот даже не знаю.  для простых целей (когда не будем переоткрывать файл и будем использовать только один поток) -- вроде всё катит..
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!