команда printf перед закрытием файлового дескриптора, все еще вызывающего во внешнем файле - PullRequest
2 голосов
/ 07 января 2012

Я написал этот код, чтобы мои руки работали над системными вызовами.Я ожидал, что первый printf покажет результат в консоли ... но оба они показывают заданное местоположение файла ..

#include<stdio.h>
#include <unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

void main(){
printf("Hello World!!! Before close\n");
close(1);
int fd = open("/home/abhishek/Desktop/example.txt",O_RDWR);
printf("Hello World!!! After close");
}

Где на самом деле идет не так ?? *

1 Ответ

2 голосов
/ 07 января 2012

Вывод в stdout может быть буферизован и фактически не записан в базовый дескриптор файла, пока поток не будет сброшен или закрыт. Попробуйте:

fflush(stdout);

до close(1).

Обратите внимание, что смешивание операций stdio и системных файловых дескрипторов не является хорошей идеей. Используйте одно или другое, иначе вы можете запутаться, как показано на рисунке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...