LINUX.ORG.RU

stderr на вход (как переменную командной строки) в другую программу

 ,


0

3

Всем привет. Есть сервис который посылает свои логи в stderr. Сейчас они пишутся в файл service &> logfile.log Я пишу анализатор логов сервиса и в общем то можно было бы и парсить файл, но душа требует оптимизации - а значит было бы круто, как нить сливать логи сразу на вход программы и парсить их в режиме realtime.

По крайней мере дляменя это было бы идеально.

Собтсвенно вопрос - как stderr перенаправить в программу, как будто stderr это переменная командной строки?

Спасибо

pipe, fork, dup2 //thread

anonymous
()
Ответ на: комментарий от ovoshlook

Я так понимаю вывод должен падать в argv[1]?

Моя фантазия — ничто по сравнению с твоей. Вывод должен «падать» в stdin.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Я понимаю что он должен падать в stdin. Я имею ввиду что stdin перенаправляется на анализатор и попадает в тело программы как массив переменных командной строки? то есть чтобы считать вывод stdin в анализаторе мне нужно читать переменную argv[1]? Или я должен программно открыть io stdin и оттуда прочитать данные?

ovoshlook
() автор топика
Ответ на: комментарий от ovoshlook

Б-же. Не надо ничо открывать, stdin уже готов чтобы ты из него читал. fread(buf, sz, n, stdin) там или fgets(buf, sz, stdin), например.

anonymous
()
Ответ на: комментарий от ovoshlook

Я понимаю что он должен падать в stdin. Я имею ввиду что stdin перенаправляется на анализатор и попадает в тело программы как массив переменных командной строки?

Ничего ты не понимаешь. Найди преподавателя, благо образование у нас бесплатное. Или хотя бы учебники почитай.

то есть чтобы считать вывод stdin в анализаторе мне нужно читать переменную argv[1]?

категорическое нет. забудь ты уже про argv.

Или я должен программно открыть io stdin и оттуда прочитать данные?

Если не придираться к словам, то да, ты должен читать данные с stdin.

man read fread fgets scanf

А если придираться к словам... Объявляю конкурс, кто больше найдет неверных словосочетаний? «stdin перенаправляется», «stdin попадает», «попадает в тело [программы]», "[stdin] попадает как массив", «переменных командной строки», «вывод stdin»... еще есть?

t184256 ★★★★★
()
Ответ на: комментарий от ovoshlook

Что именно не завелось? Шелл не перенаправил stderr в stdin?

Я так понимаю вывод должен падать в argv[1]?

Нет, в анализаторе просто читаешь стандартный ввод, да хоть scanf-ом. Впрочем, выше уже написали все.

mamboo ★★
()
Ответ на: комментарий от ovoshlook

то есть чтобы считать вывод stdin в анализаторе мне нужно читать переменную argv[1]?

В обычном случае stdin завязан на клавиатуру. В твоём случае анализатор должен работать так, как если-бы принимал логи от юзера с клавиатуры.

cPunk ★★
()
Последнее исправление: cPunk (всего исправлений: 1)
Ответ на: комментарий от mamboo

Спасибо. Теперь все ясно. Читал именно переменную argv - Естественно там был null)

ovoshlook
() автор топика
Ответ на: комментарий от t184256

За объяснение - спасибо. по оффтопу - тебе самому не лень было столько лишних буков писать?)

ovoshlook
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.