Problem z zapisywaniem do pliku po sortowaniu C

Mam problem z zapisaniem do pliku po sortowaniu C . Normalnie jeśli dodam elementy, edytuję czy usunę to zmiany zostają zapisane w pliku, lecz gdy posortuję dane to już program nie chcę zapisać. Co w moim kodzie jest nie tak , jak być powinno?

typedef struct katal
{
    char NAZWA[20];
    char WYKONAWCA[20];
    char SERIA[15];
    char RODZAJ[5];
}katalog;

FILE *plik;
char nazwa[20];

int sortuj_NAZWA (void* a, void* b)
{

    katalog *el1= (katalog*)a;
    katalog *el2= (katalog*)b;

       return strcmp(el1->NAZWA,el2->NAZWA);

}

void sortNazwa(katalog kat[])
{
    plik =fopen(nazwa,"w");
    fprintf(plik, "%d\n", &dlugosc);
qsort(kat,dlugosc, sizeof(katalog),sortuj_NAZWA);
    fclose(plik);

printf("Dane posortowane\n");
}

W pierwszym kawałku kodu nie powinno być typedef struct katalog?

Nie zapisujesz danych po posortowaniu.

Nie, polecam: http://stackoverflow.com/a/612350