LINUX.ORG.RU

Сообщения kennydzzze

 

Настройка wireguard-go на vps с openvz (ubuntu 22.04)

Пытался сначала настроить wireguard, который должен на уровне ядра linux работать, но не получилось из-за openvz. Хост использует какое-то свое кастомное ядро версии 3.10.0-1160.25.1.vz7.180.2 без модулей wireguard'a.

Погуглил, нашел реализацию wireguard-go на которой построены клиенты для macos и windows. Делал все по гайдам: 1. https://d.sb/2019/07/wireguard-on-openvz-lxc 2. https://www.reddit.com/r/WireGuard/comments/dze220/wireguard_on_ubuntu_1804_o...

После попытки первого запуска службы systemctl start wg-quick@wg0 выдает:

Job for wg-quick@wg0.service failed because the control process exited with error code.
See "systemctl status wg-quick@wg0.service" and "journalctl -xeu wg-quick@wg0.service" for details.

systemctl status wg-quick@wg0.service

× wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sat 2022-08-06 14:05:26 MSK; 12min ago
       Docs: man:wg-quick(8)
             man:wg(8)
             https://www.wireguard.com/
             https://www.wireguard.com/quickstart/
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
    Process: 780 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=1/FAILURE)
   Main PID: 780 (code=exited, status=1/FAILURE)

Aug 06 14:05:26 se9c58735.fastvps-server.com wg-quick[788]: │         https://www.wireguard.com/install/           │
Aug 06 14:05:26 se9c58735.fastvps-server.com wg-quick[788]: │                                                      │
Aug 06 14:05:26 se9c58735.fastvps-server.com wg-quick[788]: └──────────────────────────────────────────────────────┘
Aug 06 14:05:26 se9c58735.fastvps-server.com wg-quick[788]: ERROR: (wg0) 2022/08/06 14:05:26 Failed to create TUN device: CreateTUN("wg0") failed; /dev/net/tun does not exist
Aug 06 14:05:26 se9c58735.fastvps-server.com wg-quick[794]: Unable to access interface: Protocol not supported
Aug 06 14:05:26 se9c58735.fastvps-server.com wg-quick[780]: [#] ip link delete dev wg0
Aug 06 14:05:26 se9c58735.fastvps-server.com wg-quick[795]: Cannot find device "wg0"
Aug 06 14:05:26 se9c58735.fastvps-server.com systemd[1]: wg-quick@wg0.service: Main process exited, code=exited, status=1/FAILURE
Aug 06 14:05:26 se9c58735.fastvps-server.com systemd[1]: wg-quick@wg0.service: Failed with result 'exit-code'.
Aug 06 14:05:26 se9c58735.fastvps-server.com systemd[1]: Failed to start WireGuard via wg-quick(8) for wg0.

Если выполнить wg-quick up wg0:

[#] ip link add wg0 type wireguard
RTNETLINK answers: Operation not supported
[!] Missing WireGuard kernel module. Falling back to slow userspace implementation.
[#] wireguard-go wg0
┌──────────────────────────────────────────────────────┐
│                                                      │
│   Running wireguard-go is not required because this  │
│   kernel has first class support for WireGuard. For  │
│   information on installing the kernel module,       │
│   please visit:                                      │
│         https://www.wireguard.com/install/           │
│                                                      │
└──────────────────────────────────────────────────────┘
ERROR: (wg0) 2022/08/06 14:25:13 Failed to create TUN device: CreateTUN("wg0") failed; /dev/net/tun does not exist
Unable to access interface: Protocol not supported
[#] ip link delete dev wg0
Cannot find device "wg0"

В чем может быть проблема? Пытался гуглить эту ошибку, мало чего понял.

 , , ,

kennydzzze
()

OpenWRT - не работает интернет

Установил openwrt v21.02.2 на роутер asus rt-n56u (a1). Прошивка встала сразу, а вот интернет работать не хочет. Провайдер мой работает по PPPoE. Что самое странное, так это то, что роутер к нему подключился, получил ip и успешно выполняет ping 8.8.8.8, а вот в браузере выполнять запросы не получается.

На пк (windows 10), который подключен по lan к роутеру, индикатор сети в трее показывает, что сеть подключена к интернету. IPv4 адрес пк установлен статично 192.168.1.2, маска 255.255.255.0, gateway 192.168.1.1

На роутере горит только лампа напротив питания. WAN, LAN, wi-fi не горят.

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

Выполнил ifconfig через putty по ssh:

root@OpenWrt:~# ifconfig
br-lan    Link encap:Ethernet  HWaddr 32:85:A9:6A:B7:01
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: 2a02:2698:5022:9921::1/64 Scope:Global
          inet6 addr: 2a02:2698:5022:990d::1/64 Scope:Global
          inet6 addr: fe80::3085:a9ff:fe6a:b701/64 Scope:Link
          inet6 addr: fd32:58a0:3cad::1/60 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10206 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4863 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:927154 (905.4 KiB)  TX bytes:4303693 (4.1 MiB)

eth0      Link encap:Ethernet  HWaddr 30:85:A9:6A:B7:01
          inet6 addr: fe80::3285:a9ff:fe6a:b701/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13174 errors:0 dropped:2 overruns:0 frame:0
          TX packets:7207 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1856882 (1.7 MiB)  TX bytes:4592118 (4.3 MiB)
          Interrupt:5

eth0.1    Link encap:Ethernet  HWaddr 32:85:A9:6A:B7:01
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10207 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4863 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:927200 (905.4 KiB)  TX bytes:4303693 (4.1 MiB)

eth0.2    Link encap:Ethernet  HWaddr 30:85:A9:6A:B7:00
          inet6 addr: fe80::3285:a9ff:fe6a:b700/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2806 errors:0 dropped:69 overruns:0 frame:0
          TX packets:1218 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:672060 (656.3 KiB)  TX bytes:135689 (132.5 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1095 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1095 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:97480 (95.1 KiB)  TX bytes:97480 (95.1 KiB)

pppoe-pppoe Link encap:Point-to-Point Protocol
          inet addr:100.67.39.198  P-t-P:10.85.255.126  Mask:255.255.255.255
          inet6 addr: fe80::f12d:49d2:cfa6:b89a/128 Scope:Link
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:202 errors:0 dropped:0 overruns:0 frame:0
          TX packets:266 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:44766 (43.7 KiB)  TX bytes:24105 (23.5 KiB)

route:

root@OpenWrt:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.85.255.126   0.0.0.0         UG    0      0        0 pppoe-pppoe
10.85.255.126   *               255.255.255.255 UH    0      0        0 pppoe-pppoe
192.168.1.0     *               255.255.255.0   U     0      0        0 br-lan

Содержимое файла /etc/config/network:

root@OpenWrt:~# cat /etc/config/network

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd32:58a0:3cad::/48'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth0.1'

config device
        option name 'eth0.1'
        option macaddr '32:85:a9:6a:b7:01'

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config device
        option name 'eth0.2'
        option macaddr '30:85:a9:6a:b7:00'

config interface 'wan'
        option device 'eth0.2'
        option proto 'dhcp'

config interface 'wan6'
        option device 'eth0.2'
        option proto 'dhcpv6'

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option ports '0 1 2 3 8t'

config switch_vlan
        option device 'switch0'
        option vlan '2'
        option ports '4 8t'

config interface 'pppoe'
        option proto 'pppoe'
        option device 'eth0.2'
        option username 'login'
        option password 'pass'
        option ipv6 'auto'

ping:

root@OpenWrt:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=109 time=53.670 ms
64 bytes from 8.8.8.8: seq=1 ttl=109 time=53.699 ms
64 bytes from 8.8.8.8: seq=2 ttl=109 time=53.556 ms
64 bytes from 8.8.8.8: seq=3 ttl=109 time=53.531 ms
64 bytes from 8.8.8.8: seq=4 ttl=109 time=53.754 ms
64 bytes from 8.8.8.8: seq=5 ttl=109 time=53.566 ms
64 bytes from 8.8.8.8: seq=6 ttl=109 time=53.594 ms
64 bytes from 8.8.8.8: seq=7 ttl=109 time=53.573 ms
64 bytes from 8.8.8.8: seq=8 ttl=109 time=53.660 ms
^C
--- 8.8.8.8 ping statistics ---
9 packets transmitted, 9 packets received, 0% packet loss
round-trip min/avg/max = 53.531/53.622/53.754 ms

 , , ,

kennydzzze
()

Воспроизведение аудио буфера на клиенте

С вебом никак не связан, пишу для себя по настроению, поэтому могу не знать/плохо знаю какие-то, казалось бы, базовые вещи.

Проблема: когда пользователь запрашивает аудио файл для воспроизведения у сервера, он получает непосредственно сам буфер(string)/содержимое этого аудио файла. После получения буфера его необходимо как-то обработать и воспроизвести. Для решения этой проблемы я смог найти только способ с использованием объектов Blob и Audio, но в моем случае он не работает, выдавая в консоль браузера:

Не удалось декодировать медиаресурс blob:http://localhost:3000/8d214977-3b73-4efc-a917-b65693cacf72.

NotSupportedError: The media resource indicated by the src attribute or assigned media provider object was not suitable.

Не удалось декодировать медиаресурс blob:http://localhost:3000/8d214977-3b73-4efc-a917-b65693cacf72, ошибка: Error Code: NS_ERROR_DOM_MEDIA_METADATA_ERR (0x806e0006)
Пытался решить эту проблему, ничего толкового не смог найти или просто не понял сути проблемы, а значит и ее решения.

Вот обработчик, который при нажатии на кнопку отправляет серверу POST запрос, содержащий имя запрашиваемого аудио файла, а после ответа пытается его воспроизвести:

function handler(event) {
    fetch('http://localhost:3000/play', {
        method: 'POST', 
        headers: {
            'Content-Type': 'application/json'
        }, 
        body: JSON.stringify({path: event.explicitOriginalTarget.value}) // имя файла
    }).then(data => {
        data.text().then(audioBuffer => {
            const blob = new Blob([audioBuffer], {type: 'audio/mp3'});
            const urlBlob = URL.createObjectURL(blob);
            new Audio(urlBlob).play();
        });
    });
}

Сторона сервера, обрабатывающая запросы роута /play:

server.on('request', (req, res) => {
    const urlObj = url.parse(req.url, true);

    switch (urlObj.pathname) {
        // ...
        case '/play':
            let body = '';
            req.on('data', data => {
                body = data; // получаем данные о имени файла (путь к файлу) от клиента
            });
            req.on('end', () => {
                sendAudioFile(res, body); // когда получили данные, отправляем файл клиенту
            });
            break;
        // ...
    }
});

Содержимое функции sendAudioFile:

function sendAudioFile(response, body) {
    const path = JSON.parse(body.toString()).path; // что-то вроде D:/Music/Artist/Album/song.mp3
    const splitedPath = path.split('.');
    const format = splitedPath[splitedPath.length - 1]; // mp3
    const fileSize = fs.statSync(path).size;
    const header = {
        'Content-Length': fileSize,
        'Content-Type': `audio/${format}`
    };

    response.writeHead(200, header);
    fs.createReadStream(path).pipe(response);
}

 ,

kennydzzze
()

Синхронизация настроек linux между несколькими пк

Можно ли в linux настроить все нужные приложения на одном пк, а затем использовать существующие настройки на других машинах? Конкретно, интересует сохранение настроек DE, текстовых редакторов вроде sublime text. Также была бы не лишней синхронизация home каталога. Настройка одного и того же на нескольких машинах утомляет.

 , , ,

kennydzzze
()

linux не запускается без startx

В общем, поставил я debian 9 stretch через virtualbox, вроде все работало, после попытки добавить себя в sudo adduser name sudo debian перестал запускаться.

Загрузка ОС останавливается на этом этапе https://i.imgsafe.org/73/73c0af2211.png

После ctrl+alt+f2 авторизовался под своей учетной записью, выполнил sudo journalctl -b, нашел следующее:

П.с. В систему могу войти через startx, но это не решение. Также пробовал удалять gnome apt-get autoremove gnome* и заново ставить apt-get install gnome, не помогло.

 , , ,

kennydzzze
()

Клиент-сервер (консольный чат) на сокетах

Недавно начал пытаться писать программы в сторону сетевого программирования, прочитал пару статей, почитал о сокетах. В итоге могу написать чат между сервером и клиентом, но это касается только локального адреса (клиент и сервер на одной машине). Как написать клиент так, чтобы он мог подключиться к серверу, зная его глобальный ip (т.е. онлайн сервер). Задавал серверу и клиенту один и тот же глобальный ip адрес (т.к. на одной машине пока тестирую), порт можно указать любой, выше 1024, как я понял (и чтобы другая программа его не использовала). В итоге сервер запускается с заданным ip адресом и переходит в режим прослушивания, но клиент не хочет коннектиться к серверу.

Клиент:

#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct sockaddr_in client;

int main()
{
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == -1)
    {
        printf("error: invalid socket\n");
        return -1;
    }

    client.sin_addr.s_addr = inet_addr("94.180.93.163");//INADDR_ANY;
    client.sin_port = htons(1337);
    client.sin_family = AF_INET;

    printf("wait for the connect...\n");
    if (connect(sock, (struct sockaddr *)&client, sizeof(client)) == -1)
    {
        printf("error: failed connection\n");
        return -1;
    }
    else
        printf("connected\n");

    close(sock);
    return 0;
}

Сервер:


#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>

struct sockaddr_in server, client;

int main()
{
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == -1)
    {
        printf("error: invalid socket (server)\n");
        return -1;
    }

    server.sin_addr.s_addr = inet_addr("94.180.93.163");//INADDR_ANY;
    server.sin_port = htons(1337);
    server.sin_family = AF_INET;

    if (bind(sock, (struct sockaddr *)&server, sizeof(server)) == -1)
    {
        printf("error: failed connection\n");
        return -1;
    }
    else
        printf("connected\n");

    listen(sock, 5);

    char *addr_server = inet_ntoa(server.sin_addr);
    int port_server = ntohs(server.sin_port);
    printf("ip-address of server: %s:%d\n", addr_server, port_server);

    int sock_client;
    int c = sizeof(struct sockaddr_in);
    char s_size_message[5];
    while (1)
    {
        sock_client = accept(sock, (struct sockaddr *)&client, (socklen_t *)&c);
        char *addr_client = inet_ntoa(client.sin_addr);
        int port_client = ntohs(client.sin_port);

        if (sock_client == -1)
        {
            //printf("error: invalid socket (client)\n");
            //return -1;
        }
        else
        {
            printf("connected with client\n");
            printf("ip-address of client: %s:%d\n", addr_client, port_client);
            //recv(sock_client, s_size_message, 3, 0);
            //printf("%s\n", s_size_message);
        }
    }

    return 0;
}

 , ,

kennydzzze
()

Обработка сигналов в линуксе

Не понимаю, в этом коде все работает нормально, как и должно быть, таймер не завершает работу после первой секунды.

#include <stdio.h>
#include <signal.h>
#include <sys/time.h>

static int count = 0;

struct itimerval timer;

int in = 1;

void sighandler(int sig)
{
    if (sig == SIGALRM)
    {
        count++;
        printf("%d\n", count);

        if (count % 3 == 0)
        {
            timer.it_interval.tv_sec = 0;
            timer.it_value.tv_sec = 0;
            setitimer(ITIMER_REAL, &timer, NULL);
            in = 1;
        }
    }
}
int main()
{
    signal(SIGALRM, sighandler);

    char ch = '0';
    while (1)
    {
        if (in == 1)
        {
            printf("input> ");
            scanf("%c", &ch);
            switch (ch)
            {
                case 's':
                {
                    timer.it_interval.tv_sec = 1;
                    timer.it_value.tv_sec = 1;
                    setitimer(ITIMER_REAL, &timer, NULL);
                    in = 0;
                    break;
                }
                default: break;
            }
        }   
    }
    
    return 0;
}

В другом же коде (не могу его показать), где сама структура идентична этому коду, таймер завершает работу после первого достижения нуля значением it_value. И при этом программа завершается с выводом в терминал «Сигнал таймера», хотя цикл while (1) не должен допускать этого... Вторые сутки бьюсь уже. !!!ЕДИНСТВЕННОЕ!!! что отличает этот код от моего - терминал работает в неканоническом режиме. Но, по идее, это не должно влиять на работу обработчика сигнала. В чем может быть проблема?

 , , ,

kennydzzze
()

Как считывать клавиши F1...F12?

Перевел терминал в неканонический режим. Следующим кодом (язык Си) хочу захватить любую из клавиш F*. Записать код в строку. И затем проверить содержимое этой самой строки для дальнейших действий.

char input[10];
read(0, input, 10);
if (strcmp(input, "\033[15~") == 0)   //если F5
...
Проблема в том, что в неканоническом режиме считывается только 1 символ после нажатия клавиши. Как правильно считать нажатую клавишу F5?

 , ,

kennydzzze
()

esc-последовательности и терминал

Как передать параметры типа int в строку, которую нужно записать в файл терминала tty1? Пробовал через define, но не получается, константы воспринимаются как символы строки.

int function(int x, int y)
{
    #define _X_ x
    #define _Y_ y

    int file = open("/dev/tty1", O_WRONLY);
    char str[] = "\033[_X_;_Y_H";
    write(file, str, sizeof(str));
    close(file);

    return 0;
}

 , ,

kennydzzze
()

Проблемы с работой ubuntu 16.04 lts(x64)

На пк имеется windows10, хотел накатить рядом еще ubuntu, выделил для нее раздел extended с подразделами /boot(ext2), /swap(linux-swap), /root(ext4), /home(ext4). Установил ubuntu успешно, судя по соответствующему окну с уведомлением после установки. После перезагрузки пк всегда запускалась винда, grub даже не запускался (пробовал восстанавливать его через терминал с лайв-usb, нажимал shift во время загрузки), все эти операции повторял десяток раз, включая переустановки самой ос ubuntu. Диск MBR, хотя boot menu биоса может работать и с GPT(UEFI), но я всегда выбирал режим EFI при запуске установки с флешки.

Решил в очередной раз попробовать установить ubuntu, на этот раз сделал один раздел /root(ext4), установил ос, перезагрузил пк и ... снова загружается винда. Снова перезагрузил пк и на этот раз запустил boot menu, выбрал диск на котором стоит винда и ubuntu и вауля... появился grub, но какой-то багнутый. Во-первых, «отрисовывался» он снизу-вверх, как подобие 3д игр в 1990ых годам. Во-вторых, при первом нажатии кнопок навигации по меню (стрелки) появилось какое-то меню(даже не меню, а просто какой-то текст), нажал esc и вернулся в главное меню,навигация стала работать нормально.

Выбрал ubuntu, запустил, но ubuntu тоже работает странно, происходит подтормаживание окон там, где его быть не должно, в обычном браузере. Вскоре выяснилось, что и не только в браузере подтормаживает(окна становятся черно-белыми). Выйти из ubuntы нормально даже не смог, после попытки закрыть браузер все зависло, но курсор продолжал работать вместе с панелью задач в верхней части экрана. И когда я нажал на выход из системы, то зависло уже все, но опять же, кроме курсора, тут уже пришлось вырубать рубильником. п.с. На ноуте с UEFI все встало нормально с первого раза. Образ качал с оф сайта, образ 64 битный.

 , , ,

kennydzzze
()

Makefile компиляция

Не понимаю почему не удается скомпилировать все .с файлы в каталоге source. Терминал выдает ошибку «make: *** Нет правила для сборки цели «source/)», требуемой для «all_source». Останов.»

CC = gcc

DIR_SRC = ./source/
SRC_FILES = $(DIR_SRC)$(wildcard *.c))
COMPILE_SRC_FILES = $(CC) -c $(SRC_FILES)

all_source: $(SRC_FILES)
	$(COMPILE_SRC_FILES)

 , ,

kennydzzze
()

ubuntu 16.04 в virtual box, разрыв картинки

Поставил ubuntu (unity) через vb, выделил 128мб видеопамяти, включил 3d ускорение. В браузере chrome да и в мозиле тоже наблюдаются разрывы изображения, при чем не просто разрывы, которые тут же сами обратно бы «склеивались», а такие, которые приходится в ручную убирать скроллингом туда-сюда.

Пример: http://clip2net.com/clip/m405748/e4c34-clip-574kb.png

С чем это может быть связано? На семерке и linux mint через тот же vb такого не было.

 , , ,

kennydzzze
()

работа с мейкфайлом

Собственно не понимаю в чем разница между записями all: $(BIN_PATH)/$(BIN_NAME) $(BIN_PATH)/$(TEST_BIN_NAME)

и

all:<\n><\t>$(BIN_PATH)/$(BIN_NAME) $(BIN_PATH)/$(TEST_BIN_NAME)

В первом случае при вызове команды make в терминале во время компиляции происходит ошибка «make[1] nothing to be done for 'all'». Во втором случае ошибки нет. п.с. Если можно, то поподробней.

 , ,

kennydzzze
()

Тестирование функции с помощью ctest.h

Нужно протестировать функцию, которая предлагает ввести число, если есть хотя бы один символ, отличный от цифр, то предлагается заново ввести число и так до тех пор, пока не введем корректное число. Т.е. функция имеет один выход (return) и он происходит только при корректном вводе. Собственно как ее можно протестировать, используя макросы?

 , ,

kennydzzze
()

getche в терминале (gcc)

Требуется написать защиту от дурака на си, суть в том, чтобы выполнялась проверка на тип символов(разрешены только целые числа) и длину строки (не больше 3 символов). Пробовал инициализировать строку, выделял память на 3+1 символа, затем через scanf водил строку, после чего выполнялась проверка на символы и длину по-элементно. Но когда я вводил числа типа «9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999...9999», то буфер строки переполнялся и программа завершалась с ошибкой. Выделять память в 9999...999 символов не считаю правильным решением. После всех проб решил попробовать getche, но в gcc его походу нет, скачал библиотеку ncurses.h, тоже не помогло. Как можно решить эту проблему и есть ли аналоги getche для gcc?

 , , ,

kennydzzze
()

Ищу название оболочки linuxa

Прошу помочь опознать оболочку https://youtu.be/kjFUKOhAjzc (тайминг 5:35). Или это какой-нибудь пак темы и иконок для минта? Если да, то название темы тоже сойдет.

 , , , ,

kennydzzze
()

RSS подписка на новые темы