Как geany открывает дополнительные файлы?

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

MiK13
Сообщения: 1049
ОС: Linux Debian

Как geany открывает дополнительные файлы?

Сообщение MiK13 »

Вопрос не в том, с помощью каких функций он открывает файл. Вопрос в другом.
Если я в консоли выдам команду geany prog.c, то он запустится и откроет этот файл. При этом консоль окажется занятой.
Но если geany уже запущен, то этот файл откроется в новой вкладке уже запущенной программы. Консоль при этом останется свободной. Как это делается?
То есть как geany определяет, что он уже запущен и как передаёт запущенному экземпляру имя файла, который надо открыть?
Спасибо сказали:

Kopilov
Сообщения: 860
ОС: [K]Ubuntu, Debian

Re: Как geany открывает дополнительные файлы?

Сообщение Kopilov »

Что-то наподобие ps -A -f | grep `which geany` на уровне системных вызовов?
Спасибо сказали:

Аватара пользователя
Zer0
Сообщения: 369
ОС: Void, Slackware

Re: Как geany открывает дополнительные файлы?

Сообщение Zer0 »

geany file1 2>/dev/null &
file1 открыт в geany, консоль доступна для ввода команд.
geany file9 2>/dev/null &
file9 - откроется в новой вкладке geany.
Вообще исходники имеет смысл глянуть.
Memento mori ... сделай бэкап.
Спасибо сказали:

math
Сообщения: 163
Статус: Ъ участник
ОС: Artix (= Arch without systemd)

Re: Как geany открывает дополнительные файлы?

Сообщение math »

Это делается с помощью механизмов IPC (например, создаётся named pipe, и новая копия туда засылает имя файла, который нужно открыть, и после получения подтверждающего ответа от старой копии завершается).
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19300
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как geany открывает дополнительные файлы?

Сообщение Bizdelnick »

math писал:
11.05.2022 14:29
Это делается с помощью механизмов IPC (например, создаётся named pipe, и новая копия туда засылает имя файла, который нужно открыть, и после получения подтверждающего ответа от старой копии завершается).
Скорее сокет. Через пайп ответ не получишь, он однонаправленный.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

MiK13
Сообщения: 1049
ОС: Linux Debian

Re: Как geany открывает дополнительные файлы?

Сообщение MiK13 »

Zer0 писал:
11.05.2022 14:16
geany file1 2>/dev/null &
file1 открыт в geany, консоль доступна для ввода команд.
Это понятно. Я по такой аналогии сделал ряд скриптов в ~/bin. В частности для firefox и libreoffice. Чтобы не "бегать" по меню, а просто ввести команду из пары букв. Только добавил ещё >/dev/null чтобы не только syderr, но и stdout не появлялся в окне.
Zer0 писал:
11.05.2022 14:16
geany file9 2>/dev/null &
file9 - откроется в новой вкладке geany.
Вот ради этого у меня и возник вопрос.
Причём, можно просто выдать команду geany file9. Результат будет тот же
Zer0 писал:
11.05.2022 14:16
Вообще исходники имеет смысл глянуть.
Я уже не способен детально анализировать тексты такого объёма.
Но попробую проанализировать вывод с помощью strace
Kopilov писал:
11.05.2022 14:15
Что-то наподобие ps -A -f | grep `which geany` на уровне системных вызовов?
Именно такое не проходит.

Shell

$ which geany
/usr/bin/geany
. То есть which выдаёт полный путь к файлу.
У меня сейчас geany запущен, Но

Shell

$ ps -A -f | grep geany
mik13 4242 2189 0 12:45 tty2 00:00:05 geany
mik13 11579 3941 0 15:02 pts/6 00:00:00 grep --color=auto geany
. То есть в списке, который выдаёт ps есть только сама команда.
Спасибо сказали:

Аватара пользователя
Zer0
Сообщения: 369
ОС: Void, Slackware

Re: Как geany открывает дополнительные файлы?

Сообщение Zer0 »

MiK13 писал:
11.05.2022 16:55
Вот ради этого у меня и возник вопрос.
Открытие файлов средствами gtk.
Memento mori ... сделай бэкап.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19300
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как geany открывает дополнительные файлы?

Сообщение Bizdelnick »

MiK13 писал:
11.05.2022 16:55
Я уже не способен детально анализировать тексты такого объёма.
Но попробую проанализировать вывод с помощью strace
Так объём выдачи strace будет многократно больше. Тем более что Вы, похоже, и не представляете, что в нём искать.
https://github.com/geany/geany/blob/b524a58e12e85c94a32f64fb72615978b2628af1/src/socket.c#L24-L25
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 878
ОС: Slackware

Re: Как geany открывает дополнительные файлы?

Сообщение UnixNoob »

Есть команда xdg-open, может вам в эту сторону посмотреть?

Код: Выделить всё

xdg-open - opens a file or URL in the user's preferred application
«Хорошо сформулированная проблема — наполовину решенная проблема».Чарлз Кеттеринг
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19300
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как geany открывает дополнительные файлы?

Сообщение Bizdelnick »

MiK13, а в чём суть вопроса? Вас теоретически интересует, как это работает, или Вы на практике хотите что-то сделать (что именно?)? А то такое ощущение, что каждый отвечающий понимает по-своему, и даёт соответствующие его пониманию советы.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19300
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как geany открывает дополнительные файлы?

Сообщение Bizdelnick »

MiK13 писал:
11.05.2022 16:55
Zer0 писал:
11.05.2022 14:16
geany file1 2>/dev/null &
file1 открыт в geany, консоль доступна для ввода команд.
Это понятно. Я по такой аналогии сделал ряд скриптов в ~/bin. В частности для firefox и libreoffice. Чтобы не "бегать" по меню, а просто ввести команду из пары букв. Только добавил ещё >/dev/null чтобы не только syderr, но и stdout не появлялся в окне.
man nohup
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

MiK13
Сообщения: 1049
ОС: Linux Debian

Re: Как geany открывает дополнительные файлы?

Сообщение MiK13 »

Bizdelnick писал:
12.05.2022 21:47
MiK13, а в чём суть вопроса? Вас теоретически интересует, как это работает, или Вы на практике хотите что-то сделать (что именно?)?
В системах, которые мы делаем, есть ряд программ, работающих в фоновом режиме (демонов). И иногда возникает задача изменить режим работы некоторых программ без их перезапуска. Чтобы не потерялись данные, с которыми эта программа работает.

Точнее, так. При запуске программы она должна проверить, не была ли она запущена раньше. И если нет, то запустить её в обычном режиме.
А если была, то передать ей аргументы и завершить работу.
Спасибо сказали:

MiK13
Сообщения: 1049
ОС: Linux Debian

Re: Как geany открывает дополнительные файлы?

Сообщение MiK13 »

Bizdelnick писал:
12.05.2022 21:51
MiK13 писал:
11.05.2022 16:55
Я по такой аналогии сделал ряд скриптов в ~/bin. В частности для firefox и libreoffice. Чтобы не "бегать" по меню, а просто ввести команду из пары букв. Только добавил ещё >/dev/null чтобы не только syderr, но и stdout не появлялся в окне.
man nohup
А смысл в nohup? Только ради того, чтобы не было вывода на терминал?
Скрипт (ради быстрого вызова) пишется один раз. Поэтому разницы нет. Вводить команду из консоли смысла нет -- "многа букаф печатать" :)
Кстати, в man nohup увидел интересную запись:
NOTE: your shell may have its own version of nohup, which usually supersedes the version described here. Please refer to your shell’s documentation for details about the options it supports.
Но which nohup выдаёт /usr/bin/nohup. То есть это программа, не команда bash.
Или есть шелы, где это встроенная команда?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19300
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как geany открывает дополнительные файлы?

Сообщение Bizdelnick »

MiK13 писал:
14.05.2022 11:29
При запуске программы она должна проверить, не была ли она запущена раньше. И если нет, то запустить её в обычном режиме.
А если была, то передать ей аргументы и завершить работу.
Ну тут два варианта ходовых.
Вариант попроще: создаётся PID-файл, на него устанавливается эксклюзивная блокировка. При запуске, если файл залочен, отправляется сигнал записанному в нём процессу, после чего тот делает, что от него требуется; если же файл не залочен или отсутствует — запуск в «обычном режиме».
Вариант посложнее: программа слушает некий сокет. При запуске пытается подключиться к этому сокету и передать команду, в случае неудачи (сокета нет или его никто не слушает) — запуск «в обычном режиме». Тут нужно продумать протокол взаимодействия, зато его можно сделать сколь угодно навороченным, в зависимости от потребностей. Именно так сделано в geany, насколько я вижу.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

MiK13
Сообщения: 1049
ОС: Linux Debian

Re: Как geany открывает дополнительные файлы?

Сообщение MiK13 »

Bizdelnick писал:
15.05.2022 00:49
Вариант посложнее: программа слушает некий сокет. При запуске пытается подключиться к этому сокету и передать команду, в случае неудачи (сокета нет или его никто не слушает) — запуск «в обычном режиме».
Спасибо. Скорее всего так и буду делать.
Только надо поподробнее с сокетами разобраться. Я с ними пока работал только для передачи по TCP или UDP.
Спасибо сказали: