Что означает "\!" в iptables?

Единственное, что в вашем вопросе выделяется как неправильное , это то, что вы говорите

A would run first, then B gets the stdout of A

На самом деле обе программы будут запускаться почти одновременно. Если нет ввода для B, когда он пытается прочитать, он будет блокироваться до тех пор, пока не будет ввода для чтения. Точно так же, если никто не читает вывод из A, его записи будут блокироваться до тех пор, пока его вывод не будет прочитан (, некоторые из них будут буферизированы каналом ).

Единственное, что синхронизирует процессы, участвующие в конвейере, — это ввод-вывод, то есть чтение и запись по конвейеру. Если записи или чтения не происходит, то эти два процесса будут выполняться полностью независимо друг от друга. Если один игнорирует чтение или запись другого, игнорируемый процесс блокируется и в конечном итоге уничтожается сигналом SIGPIPE(, если он записывает )или получает условие конца -из -файла на своем стандартном входной поток (, если читается ), когда другой процесс завершается.

Идиоматический способ описать A | Bсостоит в том, что это конвейер, содержащий две программы. Вывод, произведенный на стандартном выходе из первой программы, доступен для чтения на стандартном вводе второй ("[вывод] Aпередается в [вход] B" ). Оболочка выполняет необходимую сантехнику, чтобы это произошло.

Если вы хотите использовать слова «потребитель» и «производитель», думаю, это тоже нормально.

Тот факт, что это программы, написанные на C, значения не имеет.То, что это Linux, macOS, OpenBSD или AIX, значения не имеет.

0
03.10.2020, 18:28
1 ответ

Согласно руководствуiptables, опция -d(, а также ряд других опций )могут иметь префикс с необязательным символом !. Это сводит на нет смысл теста.

\перед !является одной из оболочек (большинства оболочек, )заключающих в кавычки/экранирующих операторов. \!здесь будет таким же, как '!'или "!".

Символ !не нужно экранировать в большинстве распространенных оболочек, поскольку он сам по себе не является особенным, когда является частью аргументов команды, так что \здесь излишен. Независимо от того, используется ли \!, "!", '!'или !, литеральный аргумент !будет передан в iptables.

3
18.03.2021, 23:00

Теги

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