2017-02-23 6 views
0

Когда я запускаю этотНе получать выход из Printf в файл дескриптора C

close(2); 
fd = open("newfile.txt", O_WRONLY | O_CREAT | O_TRUNC, 0600); 
fprintf(stderr, "ERROR\n"); 
close(fd); 

он помещает ERROR в NewFile.

но когда я запускаю это

close(1); 
fd = open("newfile.txt", O_WRONLY | O_CREAT | O_TRUNC, 0600); 
printf("OUTPUT\n"); //fprintf(stdout, "OUTPUT\n"); 
close(fd); 

Ничего не происходит. newfile открывается в файловом дескрипторе 1, но printf не проходит.

Есть ли что-то, что мне не хватает?

ответ

0

Мне нужно позвонить

fflush(stdout); 

для промывки буфером 1 к файлу.

1

Вы изменяете дескриптор файла из-под FILE *, поэтому очень естественно, что будут странные вещи. В общем, лучше просто не делать этого вообще, или если вы должны изменить дескрипторы,

  • Использование open, dup2, close вместо close, open, чтобы понять, вы заменяете дескриптор файла ,

  • Сделайте все изменения в самом начале программы, прежде чем использовать stdio.

Если вы все еще хотите возиться с файловыми дескрипторами, вот как вы могли бы сделать это:

int fd = open("newfile.txt", O_WRONLY | O_CREAT | O_TRUNC, 0600); 
if (fd == -1) { 
    err(1, "newfile.txt"); 
} 
fflush(stdout); 
int r = dup2(fd, STDOUT_FILENO); 
if (r == -1) { 
    err(1, "dup2"); 
} 
close(fd); 

printf("OUTPUT\n"); 

// If you really need to close it later... 
fflush(stdout); 
close(STDOUT_FILENO); 
Смежные вопросы