LINUX.ORG.RU

Надо перехватить stderr и stdout в необычных условиях


0

0

Спасибо за все, что отписали ниже, но попробовал я часть Ваших советов и не вышло (конечно сам виноват: надо было еще там кое-что уточнить).
Так вот popen не подходит: он запускает bash (shell переставлять на другой (ash, zsh) не надо). У меня загрузка - 100 процессов. Если еще там добавятся bash по 300Кб, то машина и так тормозившая совсем сойдет с ума ;-(
Также советы не подходят, если при работе программы она все равно пишет в терминал.
Очень хотелось бы, чтобы потоки шли в 2 буффера. Неужели нельзя ничего сделать ? У меня все получилось, но как - не помню. (По моему работал над setvbuf, fopen и fread).
Да вот кусок моей программы для прояснений:

...
pidd=fork();
if (pidd==0)
{
execve("./main", NULL);
}
// Здесь должен быть перехватчик выводов stderr, stdout в 2 буфера
...

★★★★★

Совсем забыл, когда игрался с setvbuf, fopen, fread пользовался разделяемой памятью (хотя это могло быть и без нее).

saper ★★★★★
() автор топика

Я так понимаю перехватить - это перенаправить, так ты напиши куда.

Resident
()

Пусть все, что он напишет в stderr запишется в один большой буфер (более 64Кб они у меня все равно не выведут). Или на крайний случай в socket. Но лучше все же в буфер (как уже написал не более 64Кб). Прошу учесть, что таких программ на одном терминале параллельно будет несколько, поэтому открытие /dev/ttyx не подходит, да и ряд других "глобальных" способов. Заранее спасибо. Я к этой проблеме уже второй год возвращаюсь, да вот все не могу вспомнить, как я ее тогда решил. Если не сложно напишите про буфер, а не сокет (понятно, что в сокет попроще должно быть).

saper ★★★★★
() автор топика

сделай две pipe'ы, назнач их на соответствующие дестрипторы через dup2 после fork'а, а другим процессом работай с ними.

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