Как процесс (MySQL) знает «его» терминал, если не из Stdio?

Итак, что вы получаете в меню загрузки? Только GNU/Linux? Как вы его настраиваете? Если это какая-то автоматическая программа установки, то, наверное, проблема в программе установки.

Вы всегда можете настроить GRUB вручную, добавив запись для Windows - это должно быть просто взять одну из конфигураций двойной загрузки и изменить то, что нужно изменить. В этом примере он уже написан для двух разных дисков, хотя он для arch и Windows (но в любом случае вам просто нужно добавить запись для Windows). Я полагаю, что Ubuntu теперь использует GRUB 2, поэтому другой пример, из Gentoo Wiki, чтобы показать, как это можно сделать.

0
23.08.2018, 15:41
3 ответа

Процесс unix может читать из /dev/tty и, таким образом, обходить перенаправление.

3
28.01.2020, 02:14

Он может вызывать функцию isattyunistd.

NAME
       isatty - test whether a file descriptor refers to a terminal

SYNOPSIS
       #include <unistd.h>

       int isatty(int fd);

DESCRIPTION
       The  isatty()  function  tests  whether  fd  is an open file descriptor
       referring to a terminal.

Вероятно, как заметил @Gerard H. Pille, mysql вообще не проверяет, а просто использует /dev/tty, когда вы вызываете его с -p.

Некоторые дополнительные подробности

Я проверил в исходниках glibc реализацию isatty .

Он просто использует функцию tcgetattrдля получения терминальных возможностей файлового дескриптора. Если функция возвращает true, то это терминал.

2
28.01.2020, 02:14

Он используетgetpass()из библиотеки libc (, где она доступна ), которая описана в справочных страницах следующим образом:

The getpass() function opens /dev/tty (the controlling terminal of the process), outputs the string prompt, turns off echoing, reads one line (the "password"), restores the terminal state and closes /dev/tty again.

2
28.01.2020, 02:14

Теги

Похожие вопросы