Ciao a tutti, potete dirmi perchè se il programma seguente scrive su un file vuoto i caratteri sono scritti a partire dalla prima linea altrimenti se è già presente del testo il nuovo testo viene copiato su una nuova linea, ad esempio:
1. file vuoto
123abcd
2. File già scritto
123abcdefghilm
123abcd



codice:
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
	char *ptr;
	FILE *prova;
	DIR *dp;
	struct dirent *dirp;
	struct stat buf;
	int size, dim,nc;
	char directory[526];
	char *directoryi;
	char *stringa;
	char *stringa2;
	char *filename="top.end";
	
	getcwd(directory, sizeof(directory));
	directoryi=(char *)malloc(strlen(directory)+1);
	strcpy(directoryi,directory);
	
	while(strcmp(directory,"/")!=0){
	
	getcwd(directory, sizeof(directory));
	printf("%s\n", directory);
	printf("%s\n", directoryi);	
	 
		
		if ( (dp = opendir(directory)) == NULL){
		printf("can't open %s", argv[1]);
		exit(-1);
		}
		while ( (dirp = readdir(dp)) != NULL){
			//printf("File %s\n", dirp->d_name);
			if(strcmp(dirp->d_name,"top.end")==0){
				printf("File trovato  %s\n",dirp->d_name);
				printf("File %s\n", dirp->d_name);
				printf("\npercorso %s \n",directory);				
				if ((prova=fopen(filename,"a+"))==NULL){
					printf("non posso aprire il file");
					exit(1);
					}
				rewind(prova);
				stringa=(char *)malloc(11);
				fgets(stringa,11,prova);
				if (ferror(prova))
					perror("errore apertura file");	
				printf("primi 10 caratteri di top.end\n %s\n",stringa);
					if (fseek(prova,0,SEEK_END)!=0){//posiziono lo stream alla fine del file
					fprintf(stderr,"\n errore fseek");
					exit(1);
					}
				fputs(stringa,prova);//copio i 10 caratteri in coda
				if (ferror(prova))
					perror("errore apertura file");	
				dim= stat(filename,&buf);
				size=buf.st_size								printf("dimensione file %lld\n",(long long)buf.st_size); 
				rewind(prova);
				stringa=realloc(stringa,size+1				                         printf("File top.end con i primi 10 caratteri copiati in coda:\n");				
				while (!feof(prova)){               					fgets(stringa,size+1,prova); 					                          if (ferror(prova))
						perror("errore apertura file");	
					printf(" %s",stringa);
					}
				fclose(prova);

	      				
				exit(0);
				}
			}chdir("..");
		}
		
	
	printf("File Top.end non è stato trovato, lo crea nela directory corrente\n");
	chdir(directoryi);
	printf("\npercorso %s \n",directoryi);
	if ((prova=fopen(filename,"a+"))==NULL){
		printf("non posso aprire il file");
		exit(1);
		}
	fputs(directoryi,prova);
	rewind(prova);
	stringa2=(char *)malloc(strlen(directoryi)+1);
	while (!feof(prova)){                //ciclo continuo fino alla fine del file dovuta all'uscita di fgets  
		fgets(stringa2,size+1,prova); //incaso incontra carattere di nuovariga()
		if (ferror(prova))
			perror("errore apertura file");	
		printf(" %s",stringa2);
	
		}
	fclose(prova);	


	
		
	
}
Grazieeeeeeeee