Вывод конвейера из python в программа приводит к бесконечному циклу

Apple Open Directory - это форк OpenLDAP плюс Kerberos с некоторым дополнительным соусом Apple. Таким образом, поля, скорее всего, будут типичными записями LDAP; мне придется покопаться, чтобы увидеть, где и как они скрывают что-либо связанное с Kerberos. Интерфейс будет осуществляться через что-нибудь специфическое для Apple (например, см. документацию по API в Xcode) или через стандартные интерфейсы unix, упомянутые Стивенсом (только измененные для работы с бэкендом Apple).

0
20.02.2018, 09:28
1 ответ

Не видя кода, это предположение, но...

Программа, выполняющая чтение, вероятно, имеет код, который пытается читать из стандартного ввода с большим количеством эквивалентов блоков try/catch (C #-на основе псевдо-кода -):

string memoryLocationToDisplay;
while(true) {
  try {
    Console.Write("Give me data to dump: ")
    string input = Console.ReadLine();
    if (IsValidMemoryLocation(input)) {
      memoryLocationToDisplay = input;
    }
  catch {}
  PrintMemoryLocation(memoryLocationToDisplay)

  try {
    Console.Write("Dump again (y/n): ")
    if Console.ReadLine().ToLower() == "n" {
      exit;
    }
  } catch {}
}

Однако единственным символом, который программа считывает, является ^d (Конец файла ), что функционально приводит к бесконечному циклу с вечной печатью одной и той же ячейки памяти.

Это ошибка в программе, выполняющей чтение.но это, вероятно, достаточно легко обойти:

printf "A\nn\n" |./program

будет напечатан бит printf

A<newline>
n<newline>

который затем проходит через программу, так что теперь она видит 'n' и новую строку, так что она должна завершиться.

0
28.01.2020, 04:30

Теги

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