Мне нужна функция, которая печатает "word = n" (где n в [0..10]) для потока с использованием функции linux ssize_t write(int fd, const void *buf, size_t count);
, Пытаясь использовать fprintf, но он дает странные результаты: программа печатает в ~ 1% вызовов "woword = n", а length
например "woword = 7", равна 7. Printf print all right. Я делаю что-то неправильно или это сумка?
if ((id_result = open( out , O_WRONLY)) <= 0) {
fprintf(stderr, "%s : %s\n", currentDateTime().c_str(), "could not open output\0");
ret = P_STREAMS_LOAD_ERROR;
}
void printProbability( int probability ){
char buf[50];
memset( buf, '\0', 50 );
int length = sprintf( buf, "word=%i\n\0", probability );
fprintf(stderr, "debug : word=%i len = %i\n\0", probability, length );
int result = write( id_result, buf, length );
if( result == -1){
fprintf(stderr, "%s : %s\n", currentDateTime().c_str(), "error \n");
}
}
Редакция:
как я понимаю, у нас есть две теории: 1) смешивание printf и запись 2) с использованием '\ 0' и '\n' в fprintf
int length = sprintf( buf, "word=%i", probability );
int result = write( id_result, buf, length );
write( id_result, "\n", 1 );
с этим кодом у меня все же есть те же ошибки
аа помоги мне :))
Если вы вставляете вызовы на printf
(или write
) и fprintf(stderr,...)
вывод не обязательно будет выполнен в порядке. Буферизация продолжается, и фактический вывод, вероятно, не переключается на символ конца строки.
stdout
и stderr
обычно используют один и тот же буфер и остаются синхронизированными.
\0
в конце ваших строк, компилятор добавляет его автоматически.