errno_t freopen_s (FILE ** pFile, const char * path, const char * mode, FILE * stream);freopen или freopen_s, что именно они делают?
Здесь freopen_s разъединяет указатель FILE stream
от того, что он указывает на, затем связывает его с файлом, который находится в path
. mode
определяет пределы для того, что можно сделать с помощью этого конкретного указателя stream
.
Насколько я могу судить, все это не что иное, отличается от того, что случилось бы с:
...
fclose(stream);
fopen_s(&stream, path, mode);
...
Мой вопрос: Что делает pFile
там делать? freopen также имеет его, как возвращаемое значение. Из всех примеров, которые я видел, pFile
, после вызова, также указывает на тот же файл, который находится по адресу path
. Таким образом:
...
fclose(stream);
fopen_s(&stream, path, mode);
fopen_s(pFile, path, mode);
...
Действительно ли это так?
freopen() делает это атомарно, довольно важно, когда у вас есть потоки, которые также записываются в один поток. –
Я так понимаю, и предпочел бы, чтобы в любой день. Тем не менее, я не понимаю, почему он присваивает один * путь к файлу * 2 * указателям FILE * ... Я не вижу никакой пользы от этого. И в любом другом примере, который я видел, назначение 'FILE * pFile', или возвращаемое значение остается неиспользованным. – ThoAppelsin
Я предполагаю, что вы говорите об защищенной версии, freopen_s(). Он гарантирует, что ваш ФАЙЛ * будет NULL, когда вы сделаете это неправильно. Слишком много программистов на C игнорируют возвращаемое значение, как вы хотите, слепо надеясь, что он сработает, а затем продолжайте писать в несуществующий файл. Который превращает вашу программу в зомби, который является желающим участником перехвата ручки. –