fopen retorna ponteiro NULL se o arquivo já estiver aberto
Eu estava assumindo que fopen retorna ponteiro NULL se o arquivo já estiver aberto. Mas parece que fopen não retorna NULL caso o arquivo já esteja aberto no modo "w". Abaixo está o código que eu usei para tentar isso e não recebo nenhum erro. Eu tentei com o mingw32 e com os compiladores TDM-GCC-64. Se não me engano, o C ++ dá erro se o arquivo já estiver aberto.
#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);
}
Editar: Adicionado código extra para gravar alguns dados em fp1 e fp2 e ver o comportamento. Se executado, o arquivo1.txt contém os dados "BMS" e parece estar com o comportamento correto e fp1 e fp2 se movem independentemente conforme o esperado. Primeiro o AMS é gravado usando FP1 e, em seguida, A é substituído por B usando FP2 e a saída final é BMS.