Есть ли способ в C ++, чтобы сказать, указывают ли std :: cout и std :: cerr на одно и то же место назначения?
То есть я хотел бы иметь возможность различать, когда программазапускается как
program
или program > log 2>&1
или program &> log
против
program > log
или program 2> errors
или program > log 2> errors
(Вариант использования - это ситуация, когда мы хотели бы, чтобы информация об ошибках выводилась на stdout и stderr, когда они разделены, но мы хотим вывести вывод в несколько отличном формате (не просто конкатенацию), если они оба переходят ктот же пункт назначения. - Да, я знаю, что это не идеально, и не является официально рекомендованным способом делать вещи, и его не следует рассматривать как стандартный способ делать вещи. Но, пожалуйста, просто поверьте мне,тем не менее, что мы потратили время на то, чтобы все обдумать, и для нашего конкретного варианта использования это лучший вариант.)
Для наших целей мы можем предположить, что ничего не было сделано с помощью cout /перенаправление cerr внутри самой программы (простоl перенаправление командной строки на уровне оболочки), поэтому, если есть функциональность уровня C, которая смотрит непосредственно на stdout / stderr (а не на потоки std :: cout и std :: cerr), это, вероятно, тоже будет работать.