greycat |
|
Темы:
15
Сообщения:
134
Участник с: 30 сентября 2016
|
все равно не совсем понятны некоторые детали. Я писал на c++ и имею представление что такое потоки ввода и вывода и аргументы командной строки.Попробовал запустить pacman как вы указали но pacman не стал ждать ввода, а сразу завершился. Как он определил что ввод осуществлялся не через конвейер?Я предполагаю, что в pacman существует проверка значения stdin на несоответствие консольному stdout, но опять же - консоль тоже программа, или у них особые идентификаторы? |
vinc |
|
Темы:
12
Сообщения:
180
Участник с: 13 июня 2015
|
greycat greycatЕсли вы писали на С и интересуют такие подробности, то лучше самому поэкспериментировать. Например: isatty()
|
greycat |
|
Темы:
15
Сообщения:
134
Участник с: 30 сентября 2016
|
да, действительно, все крутится вокруг функции isatty(). Я и не слышал о такой, теперь буду знать) Спасибо всем участникам темы) |
grayich |
|
Темы:
216
Сообщения:
1984
Участник с: 08 января 2009
|
greycatэто синоним `` в баш подобных шелах echo `ls` соответствует echo $(ls) |
heider |
|
Темы:
0
Сообщения:
83
Участник с: 09 декабря 2015
|
greycatПочему это не стал? Вы набрали команду и нажали Enter, таким образом из стандартного ввода прилетела пустая строка. |
greycat |
|
Темы:
15
Сообщения:
134
Участник с: 30 сентября 2016
|
heiderЕсли бы pacman ожидал что-либо из стандартного потока ввода, он бы не продолжил свою работу, не встретив \n. По аналогии как и scanf приостанавливает поток, пока не встретит \n . Нажимая Enter в первый раз я всего лишь запускаю программу. |
push_sla |
|
Темы:
7
Сообщения:
65
Участник с: 21 октября 2016
|
И все встанет на свои места ^.^
Сотрудник техподдержки признался: он хорошо зарабатвыает просто потому, что умеет гуглить быстрее клиентов.
|
vasek |
|
Темы:
48
Сообщения:
11330
Участник с: 17 февраля 2013
|
greycat Согласно man команда задается как pacman <operation> [options] [targets] где [targets] по существу можно считать потоком ввода данных (stdin) и можно с большой долей вероятности утверждать, что при обработке этого потока возможно 4 варианта 1. [targets] = пакет - обработка происходит без ошибок и pacman установит/удалит данный пакет 2. [targets] отсутствует (pacman -R) - обработка закончится ошибкой error: no operation specified (use -h for help) 3. [targets] указана неверно - ввод данных вообще отсутствует (pacman -R -) - обработка закончится ошибкой error: argument '-' specified without input on stdin 4. [targets] пустая строка - ввод данных пустой (в случае пустого вывода pacman -Qdt, используемого как входной поток в команде pacman -Qdt | sudo pacman -Rsn -) - обработка закончится ошибкой error: argument '-' specified with empty stdin Если дизассемблировать программу pacman, то все эти случаи действительно имеются то есть приведены соответствующие строки, которые вызываются в определенных ситуациях и выводятся при завершении программы.
Ошибки не исчезают с опытом - они просто умнеют
|
indeviral |
|
Темы:
38
Сообщения:
3169
Участник с: 10 августа 2013
|
vasekВам явно скучно ссылка))
Ошибки в тексте-неповторимый стиль автора©
|
vasek |
|
Темы:
48
Сообщения:
11330
Участник с: 17 февраля 2013
|
indeviralДа просто было дольше искать исходники, чем запустить инструмент и найти несколько строк. А если честно, то и не догадался поискать исходники для более детального анализа.
Ошибки не исчезают с опытом - они просто умнеют
|