es fopen devuelve el puntero NULL si el archivo ya está abierto

Estaba suponiendo que fopen devuelve el puntero NULL si el archivo ya está abierto. Pero parece que fopen no devuelve NULL en caso de que el archivo ya esté abierto en modo "w". A continuación se muestra el código que utilicé para probar esto y no recibo ningún error. Intenté con mingw32 y con los compiladores TDM-GCC-64. Si no me equivoco, C ++ da error si el archivo ya está abierto.

#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: se agregó código adicional para escribir algunos datos en fp1 y fp2 y ver el comportamiento. Si se ejecuta, el archivo1.txt contiene datos "BMS" y parece ser un comportamiento correcto y fp1 y fp2 se mueven independientemente como se esperaba. Primero AMS se escribe usando fp1 y luego A se reemplaza por B usando fp2 y la salida final es BMS.

Respuestas a la pregunta(1)

Su respuesta a la pregunta