Я предполагал, что fopen возвращает указатель NULL, если файл уже открыт. Но, похоже, fopen не возвращает NULL, если файл уже открыт в режиме "w". Ниже приведен код, который я использовал, чтобы попробовать это, и я не получаю никаких ошибок. Я пробовал с mingw32, а также с компиляторами TDM-GCC-64. Если я не ошибаюсь, C ++ выдает ошибку, если файл уже открыт.
#include<stdio.h>
int main()
{
FILE *fp1, *fp2;
fp1=fopen("file1.txt", "w");
fp2=fopen("file1.txt", "w");
if(fp2==NULL)
{
printf("Error in opening file\n");
return(0);
}
// Edit: added following code to check the behavior if write operation
// is performed simultaneously
fputc('A', fp1);
fputc('M', fp1);
fputc('S', fp1);
fputc('B', fp2);
fclose(fp1);
fclose(fp2);
return(0);
}
Edit:
Добавлен дополнительный код для записи некоторых данных в fp1 и fp2 и просмотра поведения. При выполнении файл file1.txt содержит данные «BMS» и, по-видимому, работает корректно, а fp1 и fp2 перемещаются независимо, как и ожидалось. Сначала AMS пишется с использованием fp1, а затем A заменяется на B с использованием fp2, а окончательный вывод - BMS.