Захват STDIN - PullRequest
       1

Захват STDIN

3 голосов
/ 29 ноября 2010

При создании репозитория Subversion в файловую систему сбрасывается несколько файлов шаблонов хуков.При проверке примера ловушки precommit выясняется, что ловушка выполняется с информацией, передаваемой аргументом и, по-видимому, также STDIN.

# ... Subversion runs this hook by invoking a program
# (script, executable, binary, etc.) named 'pre-commit' (for which
# this file is a template), with the following ordered arguments:
#
#   [1] REPOS-PATH   (the path to this repository)
#   [2] TXN-NAME     (the name of the txn about to be committed)
#
#   [STDIN] LOCK-TOKENS ** the lock tokens are passed via STDIN.

Захват аргументов тривиален, но как программа может перехватить STDIN?Следующий фрагмент кода, запускаемый в int main (...), ничего не может собрать.

char buffer[1024];
std::cin >> buffer;
buffer[1023] = '\0';

Что я делаю не так?

1 Ответ

5 голосов
/ 29 ноября 2010

Простейший способ считывания построчного ввода - следующая парадигма:

std::string line;
while(getline(line, std::cin)) {
    // Do something with `line`.
}

это также безопасно, надежно и относительно эффективно.Не копайтесь в буферах символов без необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...