LINUX.ORG.RU

prog >> log 2>&1

anonymous
()

неа не работает так я пробывал...
на всякий случай shell - bash.

даже сырец prog приведу :)))

#include <cstdio>
int main()
{
printf ("step1\n");

char *p = NULL;
char a = *p;
return 0;
}

При чтении сразу Segmentation fault (так и задумано естественно, это-ж тест).

anonymous
()

А что тут работать то должно?

Строчка "step1" что ли в файл не выводится? И использования stderr я тут не наблюдаю. Ты часом не путаешь то, что выводит bash с тем, что выводит твоя программа?

Murr ★★
()

ты хочешь сказать что надпись Segmentation fault не идет на stderr ? или хочешь сказать что когда она идет на stderr запись в лог уже не идет ?

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

Её выводит bash, по всей видимости, не приложение же ;)

Murr ★★
()

понятно что не приложение...
да ты прав этот мессадж не слить в лог:
#include <cstdio>
int main()
{
fprintf (stdout, "step1\n");
fprintf (stderr, "step2\n");

char *p = NULL;
char a = *p;
return 0;
}

хорошо но какого хрена пишеться только step2 ?
prog >> log 2>&1
cat log
step2

anonymous
()

Потому что stdlib ведёт буферизацию ввода-вывода stdout.
Если ты убиваешь процесс, то буфер не попадает в файл.
Попробуй fflush(stdout) после fprintf или же man setvbuf.

Murr ★★
()

ды ты прав а вроде по стандарту после \n должно fflush иться ?

anonymous
()

At program startup, three text streams are predefined and need not be opened explicitly - standard input (for reading conventional input), standard output (for writing conventional output), and standard error (for writing diagnostic output). As initially opened, the standard error stream is not fully buffered; the standard input and standard output are fully buffered if and only if the stream can be determined not to refer to an interactive device.

ISO/IEC 9899:999 (E)
7.19.3.7

Так что - fully buffered. То, о чем пишешь ты, - это line buffering.

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