esta afirmação
if((fp = fopen(fname, "w")) != NULL) {
deve ser:
if((fp = fopen(fname, "w")) == NULL) {
I.E. o código postado está verificando a condição de sucesso e chamando-o de erro
em uma nota relacionada:
esta afirmação:
free(fp);
não é como fechar um arquivo
prefere usar:
fclose( fp );
também,
df
informa o uso do espaço em disco
Para exibir as informações sobre os arquivos, use:
ls -al
Recomendamos enfaticamente que você faça uso extensivo das páginas man
de todas as funções que deseja usar.