использование конвейера

все равно не совсем понятны некоторые детали. Я писал на c++ и имею представление что такое потоки ввода и вывода и аргументы командной строки.Попробовал запустить pacman как вы указали
[[email protected] ~]$ sudo pacman -S -
error: argument '-' specified without input on stdin
но pacman не стал ждать ввода, а сразу завершился. Как он определил что ввод осуществлялся не через конвейер?
Я предполагаю, что в pacman существует проверка значения stdin на несоответствие консольному stdout, но опять же - консоль тоже программа, или у них особые идентификаторы?
greycat
Я писал на c++ и имею представление что такое потоки ввода и вывода и аргументы командной строки.
greycat
Я предполагаю, что в pacman существует проверка значения stdin на несоответствие консольному stdout
Если вы писали на С и интересуют такие подробности, то лучше самому поэкспериментировать.
Например: isatty()
#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
  if (isatty(fileno(stdin)))
    puts("stdin is connected to a terminal");
  else
    puts("stdin is NOT connected to a terminal");
  return 0;
}
да, действительно, все крутится вокруг функции isatty(). Я и не слышал о такой, теперь буду знать)
Спасибо всем участникам темы)
greycat
я не совсем понимаю эту конструкцию
$(pacman -Qtdq)
это синоним `` в баш подобных шелах
echo `ls` соответствует echo $(ls)
greycat
Попробовал запустить pacman как вы указали
[[email protected] ~]$ sudo pacman -S -
error: argument '-' specified without input on stdin
но pacman не стал ждать ввода, а сразу завершился.
Почему это не стал? Вы набрали команду и нажали Enter, таким образом из стандартного ввода прилетела пустая строка.
heider
Почему это не стал? Вы набрали команду и нажали Enter, таким образом из стандартного ввода прилетела пустая строка.
Если бы pacman ожидал что-либо из стандартного потока ввода, он бы не продолжил свою работу, не встретив \n. По аналогии как и scanf приостанавливает поток, пока не встретит \n . Нажимая Enter в первый раз я всего лишь запускаю программу.
echo "bumblebee" | pacman -Ss -
И все встанет на свои места ^.^
Сотрудник техподдержки признался: он хорошо зарабатвыает просто потому, что умеет гуглить быстрее клиентов.
greycat
Попробовал запустить pacman как вы указали
[[email protected] ~]$ sudo pacman -S -
error: argument '-' specified without input on stdin
но pacman не стал ждать ввода, а сразу завершился. Как он определил что ввод осуществлялся не через конвейер?

Согласно 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, то все эти случаи действительно имеются
2. 0x0001ceb0     .string "no operation specified (use -h for help)\n" ; len=42
3. 0x0001ce80     .string "argument '-' specified without input on stdin\n" ; len=47
4. 0x0001ce50     .string "argument '-' specified with empty stdin\n" ; len=41
то есть приведены соответствующие строки, которые вызываются в определенных ситуациях и выводятся при завершении программы.
Ошибки не исчезают с опытом - они просто умнеют
vasek
дизассемблировать
Вам явно скучно ссылка))
Ошибки в тексте-неповторимый стиль автора©
indeviral
Вам явно скучно ссылка))
Да просто было дольше искать исходники, чем запустить инструмент и найти несколько строк.
А если честно, то и не догадался поискать исходники для более детального анализа.
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.