Сообщения Jullyfish
Си. Нормально ли не освобождать ресурсы, которые освобождает ОС после завершения программы?
Пример:
int main()
{
int fd;
char *filename;
filename = malloc_filename();
fd = open(filename, O_RDWR);
if (!fd) {
perror(filename);
/* free(filename); */
return 1;
}
doing_something(fd);
/* free(filename); */
/* close(fd); */
return 0;
}
Что плохого, если я не сделаю free() и close()? Какие подводные камни? Я раньше думал, что valgrind ругается, если сам не сделал free(), но нет (не исключено, что я неправильно воспользовался valgrind).
gcc. Что такое trigraph?
В моём коде есть участок:
#if 0 /* TODO */
if (qec->flags ???)
#endif
Если это скомилировать:
gcc -Wall main.c
Выдаёт:
main.c: In function ‘set_set’:
main.c:405:25: warning: trigraph ??) ignored, use -trigraphs to enable [-Wtrigraphs]
405 | if (qec->flags ???)
У trigraph в gcc есть какое-то специальное значение? Почему оно на это дело ругается?
sed. Паттерн для конструкции name=value, отрицательный value.
Есть строки формата name=value, надо их находить с помощью паттерна. Я с ходу написал так:
[a-z_]\+=[0-9]\+
Проблема, оно не учитывает, что value может быть отрицательным.
Как сделать, чтобы учитывалось, что перед [0-9] может быть, а может не быть -?
Передача битового поля как аргумент функции
Предположим, есть структура с битовым полем:
struct example {
unsigned bit_field:1;
/* тут много других полей структуры */
};
Далее хочется описать функцию, которая:
- Возвращает код успеха;
- Первым аргументом принимает адрес битового поля как параметр-переменную;
- Вторым аргументом принимает какую-нибудь большую структуру, исходя из её значений меняется значение битового поля.
Пример обращения к этой функции:
struct example ex;
int rc;
rc = func(&ex.bit_field, &big_struct);
Как должно выглядеть объявление функции func?
Почему stl основной формат для подготовки gcode для 3D-принтера?
stl (stereolithography) содержит в себе информацию о вершинах треугольников из которых получается полигональная сетка. Изобразить идеальный круг с помощью stl невозможно.
gcode – векторный формат, следовательно и круг можно идеально изобразить.
NetBSD, /dev/tun0 permission
Простая программка для проверки открытия туннеля:
/* open_tun0 */
#include <fcntl.h>
#include <stdio.h>
int main()
{
int fd;
fd = open("/dev/tun0", O_RDWR);
printf("%d\n", fd);
if (fd == -1)
perror("/dev/tun0");
return 0;
}
Создаю tun0-интерфейс:
# ifconfig tun0 create
# open_tun0
3
# chown dummy /dev/tun0
# su dummy
$ open_tun0
-1
/dev/tun0: Operation not permitted
Тоже самое делаю в OpenBSD (только там чуть по-другому интерфейс создаётся):
# ifconfig tun0 group tun
# open_tun0
3
# chown dummy /dev/tun0
# su dummy
$ open_tun0
3
Почему в NetBSD не хочет открываться, хотя права выданы?
Определить какой процесс читает содержимое файла
Есть одноплатник, на нём запускается программа, которая каким-то образом считывает содержимое файла и передаёт информацию драйверу. Если файла нет, выводится сообщение об ошибке, с указанием того, что файл не найден.
Если посмотреть запуск программы через strace, никакого открытия файла не происходит. Если файла нет, сообщение об ошибке, тоже в логах strace нет.
При этом, судя по всему, файл открывается, считывается и закрывается. Поэтому lsof тут не помогает.
Какие есть ещё варианты?
Перемещено hobbit из general
Базовый минимум html, css без js для пк/смартфона/TUI
linux.org.ru, к примеру, хорошо выглядит как и в консольном браузере, как и на ПК, так и на смартфоне даже с отключенным js.
Есть какой-то небольшой набор базовых правил, чтобы всё было так аккуратно? Хочу себе на сайте также.
tuxguitar не запускается. java.lang.UnsupportedClassVersionError
При запуске выдаёт:
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/eclipse/swt/widgets/Display has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
Пробовал меня версию таким образом (как я понял, нужна версия 11, которая и установилась вместе с пакетом tuxguitar):
# update-alternatives --config java
There is 5 program that provides 'java'.
Selection Command
-----------------------------------------------
* 1 java-21-openjdk.x86_64 (/usr/lib/jvm/java-21-openjdk-21.0.4.0.7-2.fc40.x86_64/bin/java)
2 java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.12.0.7-2.fc40.x86_64/bin/java)
3 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.432.b06-3.fc40.x86_64/jre/bin/java)
4 /usr/lib/jvm/jre-1.7.0-oracle.x86_64/bin/java
+ 5 /usr/lib/jvm/java-11-openjdk/bin/java
$ java -version
openjdk version "11.0.27" 2025-04-15
OpenJDK Runtime Environment (Red_Hat-11.0.27.0.6-1) (build 11.0.27+6)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.27.0.6-1) (build 11.0.27+6, mixed mode)
Ошибка всё та же. Как это вылечить?
Вёрстка комментариев поехала
Buildroot. Заставить работать нормально X11. Raspberry pi 3.
Пытаюсь на досуге заставить работать иксы собранные в buildroot. В каком-то виде их даже получается запустить. Но не работает клавиатура, а мышь, если получается заставить работать, то работает ужасно. А ещё хочу работающий тачскрин…
Вот всё в конфиге связанное с иксами:
BR2_PACKAGE_XORG7=y
BR2_PACKAGE_XSERVER_XORG_SERVER=y
BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR=y
BR2_PACKAGE_XSERVER_XORG_SERVER_XVFB=y
BR2_PACKAGE_LIBXCB=y
BR2_PACKAGE_XLIB_LIBICE=y
BR2_PACKAGE_XLIB_LIBSM=y
BR2_PACKAGE_XLIB_LIBX11=y
BR2_PACKAGE_XLIB_LIBXAU=y
BR2_PACKAGE_XLIB_LIBXAW=y
BR2_PACKAGE_XLIB_LIBXCURSOR=y
BR2_PACKAGE_XLIB_LIBXDAMAGE=y
BR2_PACKAGE_XLIB_LIBXDMCP=y
BR2_PACKAGE_XLIB_LIBXEXT=y
BR2_PACKAGE_XLIB_LIBXFIXES=y
BR2_PACKAGE_XLIB_LIBXFONT2=y
BR2_PACKAGE_XLIB_LIBXFT=y
BR2_PACKAGE_XLIB_LIBXI=y
BR2_PACKAGE_XLIB_LIBXINERAMA=y
BR2_PACKAGE_XLIB_LIBXMU=y
BR2_PACKAGE_XLIB_LIBXPM=y
BR2_PACKAGE_XLIB_LIBXRANDR=y
BR2_PACKAGE_XLIB_LIBXRENDER=y
BR2_PACKAGE_XLIB_LIBXRES=y
BR2_PACKAGE_XLIB_LIBXT=y
BR2_PACKAGE_XLIB_LIBXXF86VM=y
BR2_PACKAGE_XLIB_LIBFONTENC=y
BR2_PACKAGE_XLIB_LIBXCVT=y
BR2_PACKAGE_XLIB_LIBXKBFILE=y
BR2_PACKAGE_XLIB_LIBXSHMFENCE=y
BR2_PACKAGE_XLIB_XTRANS=y
BR2_PACKAGE_XAPP_SESSREG=y
BR2_PACKAGE_XAPP_TWM=y
BR2_PACKAGE_XAPP_XAUTH=y
BR2_PACKAGE_XAPP_XCLOCK=y
BR2_PACKAGE_XAPP_XDM=y
BR2_PACKAGE_XAPP_XEYES=y
BR2_PACKAGE_XAPP_XINIT=y
BR2_PACKAGE_XAPP_XKBCOMP=y
BR2_PACKAGE_XAPP_XRDB=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_EVDEV=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_LIBINPUT=y
BR2_PACKAGE_XDRIVER_XF86_INPUT_MOUSE=y
BR2_PACKAGE_XDRIVER_XF86_VIDEO_FBDEV=y
BR2_PACKAGE_XFONT_FONT_UTIL=y
BR2_PACKAGE_XFONT_ENCODINGS=y
BR2_PACKAGE_XFONT_FONT_ALIAS=y
BR2_PACKAGE_XFONT_FONT_CURSOR_MISC=y
BR2_PACKAGE_XFONT_FONT_MISC_MISC=y
BR2_PACKAGE_XCB_PROTO=y
BR2_PACKAGE_XORGPROTO=y
BR2_PACKAGE_MCOOKIE=y
BR2_PACKAGE_XDATA_XBITMAPS=y
BR2_PACKAGE_XTERM=y
BR2_PACKAGE_XKEYBOARD_CONFIG=y
X -configure не работает (да и все остальные иксовые команды), в логе следующая ошибка:
... fbdev_drv.so: undefined symbol: fbdevHWSave
Лечится созданием файла /etc/X11/xorg.conf со следующим содержанием:
Section "Module"
Load "fbdevhw"
Load "shadow"
EndSection
Таким образом иксы запускаются, но X -configure сделать нельзя, т.к. он начинает работу как если бы конфигов нет, а если нет конфига, то теряется fbdevHWSave.
Далее пытался заставить работать мышь.
Section "InputDevice"
Identifier "Mouse"
Driver "mouse"
Option "Protocol" "Logitech" # "auto" делает PS/2
Option "Device" "/dev/input/event1"
EndSection
И она даже как-то работает. Если протокол поставить auto, ставится по умолчанию PS/2 и курсор улетает куда-то… Если поставить Logitech (поскольку мышь у меня logitech), то курсор как-то хаотично двигается по оси X (и иногда по оси Y) и, судя по всему, ещё и клики делает при движении.
Пробовал ещё такое, но никакого видимого результата не дало, курсор не двигается:
Section "InputClass"
Identifier "libinput mouse catchall"
MatchIsPointer "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection
А с клавиатурой много перепробовал, всё приводить не хочется. Единственное, сделаю замечание, что драйвер kbd отсутствует, ибо в buildroot он в LEGACY.
Кто тут силён в иксах?
Разблокировка Rockchip MPP на GitHub
В конце прошлого года репозиторий был заблокирован и было очень много новостей на эту тему.
https://www.opennet.ru/opennews/art.shtml?num=64512
Сейчас его разблокировали, а как и почему, нигде не нашёл. Есть какие-нибудь подробности?
Buildroot. Символическая ссылка на .so файл
Через механизм br2-external добавил пакеты, которые собираются в *.so файлы. Все из них собираются с помощью обычного Makefile. В мануале написано, что в таком случае надо в libfoo.mk файле поступать следующим образом:
define LIBFOO_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(TARGET_DIR)/usr/lib
$(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/foo.d
endef
Как я и сделал в своём *.mk файле. Есть файл libfoo.so.1.2.3, на него должны быть символические ссылки libfoo.so.1 и libfoo.so. Они не создаются. Как правильно сделать, чтобы они создавались при сборке?
Для пакетов, что уже прилагаются к buildroot, эти ссылки создаются, но я так и не смог найти в каком месте. В мануале об этом ничего.
ncurses. Текущее положение курсора.
Решил поиграться с ncurses. Для начала решил написать программку, которая будет показывать текущее положение курсора мыши. И тут началось…
Для получения положения курсора настраивается мышь с помощью функции mousemask() с флагом REPORT_MOUSE_POSITION. Как оказалось, этого недостаточно. Поискал в интернетах, обнаружилось, что надо настроить терминал, чтобы он считывал положение мыши.
$ echo $TERM
xterm-256color
Выяснилось, что чтобы в xterm обнаружить движение, нужно передать следующую escape-последовательность "\033[?1003h\n".
Окей, программа работает, положение курсора указывается. Но после завершения программы, все движения мыши терминал выплёвывает в терминал. Чтобы отключить отслеживание курсора передаётся последовательность "\033[?1003l\n", добавил в конце программы. Всё супер. Но…
Программа может быть завершена с помощью сигналов, я добавил, чтобы обработчики сигналов также передавали последовательность для отключения мыши. Сделал. Всё супер. Но…
Также есть прекрасный сигнал SIGSTOP и на него никакой обработчик повесить нельзя. И всё, тупик. Если программу отправить в «фон», то у нас терминал весело плюётся данными о положении мыши.
Может кто подскажет как это грамотно сделать?
Код программы целиком:
#include <ncurses.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
enum { key_escape = 27 };
/*
* Escape sequences for xterm mouse position detection.
* TODO: find a better solution:
*/
const char report_mouse_start[] = "\033[?1003h\n";
const char report_mouse_end[] = "\033[?1003l\n";
static void at_exit()
{
write(1, report_mouse_end, sizeof(report_mouse_end)-1);
endwin();
}
static void sigexit_handler()
{
at_exit();
_exit(0);
}
static void set_signals()
{
signal(SIGTERM, sigexit_handler);
signal(SIGINT, sigexit_handler);
signal(SIGQUIT, sigexit_handler);
}
static void init_curses()
{
initscr();
cbreak();
keypad(stdscr, 1);
noecho();
curs_set(0);
mousemask(REPORT_MOUSE_POSITION, NULL);
}
static void procmouse()
{
MEVENT event;
int rc;
rc = getmouse(&event);
if (rc == OK) {
mvprintw(0, 0, "X:Y %03d:%03d", event.x, event.y);
}
}
int main()
{
int key;
set_signals();
atexit(at_exit);
/* Init xterm mouse report: */
write(1, report_mouse_start, sizeof(report_mouse_start)-1);
init_curses();
for (;;) {
key = getch();
if (key == KEY_MOUSE)
procmouse();
else if (key == key_escape)
break;
}
return 0;
}
OpenBSD. Настроить http reverse proxy.
Есть два стула сервера, назовём их vps и home. На обоих серверах стоит OpenBSD и работает родной httpd. vps – хост в интернете, home – нет. Также есть своё доменное имя my.domain.net.
Как настроить так, чтобы при открытии vps.my.domain.net открывался сайт с компьютера vps (это как раз легко и уже сделано), а при открытии home.my.domain.net открывался сайт с компьютера home?
~/.ssh/config подключение к одному хосту из разных мест.
Дано:
- Ноутбук, с которым я бываю на работе и «где-то ещё»;
- Рабочий сервер, «белого» IP нет;
- ssh-туннель через мой домашний компьютер.
Требуется:
Настроить config, чтобы подключаться к одному хосту в зависимости от расположения. Не исключаю, что это невозможно. Но вдруг. :^)
Чуть подробнее с примерами:
Host work
HostName my.home.net
User user
PubkeyAuthentication yes
IdentityFile ~/.ssh/work
Port 20000
IdentitiesOnly yes
Host work_local
HostName 192.168.1.200
User user
PubkeyAuthentication yes
IdentityFile ~/.ssh/work
IdentitiesOnly yes
Если я на работе, я подключаюсь так:
$ ssh work_local
Если я «где-то ещё»:
$ ssh work
Хочется, чтобы я мог в обоих случаях делать:
$ ssh work
Но если я на работе, то подключение по локальной сети (ssh user@192.168.1.200), а если «где-то ещё», то подключение через домашний компьютер (ssh -p20000 user@my.home.net).
Галочка решённой темы в лентах форума
В трекере и в отдельных темах видно когда тема отмечена как решённая. В лентах форума («Полная лента форума», «Лента технического форума», «Лента форума без Talks») никаких обозначений, что тема отмечена как решённая (или я такой невнимательный. :^) )
Можете, добавить, пожалуйста?
Кто-нибудь умеет качать с Baidu?
В интернетах искал, как-то уже никакой способ не работает, а нужен файл на 16 гб.
Примонтировать директорию в оффтопике
Знакомый сидит под оффтопиком. У меня на компьютере есть директория, к которой я хочу дать ему доступ по сети (сеть не локальная), чтобы он там мог редактировать файлы (а конкретно его личные статичные веб-странички). Как это лучше сделать?
P.s. знакомый в возрасте, с консолью не знаком, ssh не предлагать.
| следующие → |