codice:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define  EXTENSION      ".part"
#define  SINTAX_ERROR   "Hai digitato male il comando o uno dei parametri"
#define  READ_ERROR     "Errore di lettura dal file indicato"
#define  BUFF_LN        50
#define  OK             0
#define  KO             1  

/**concatena il nuemro con l'estenzione
*@param   num     numero del file
*@param  *str2    stringa da concatenzare
*@return  nome file composto da un nuemro identificativo e estensione
*/
char *strConcat(unsigned long int num,const char *str2){
     char *str,str1[BUFF_LN];
     int i,j;
     itoa(num,str1,10);
     str=(char *)calloc(sizeof(char),strlen(str1)+strlen(str2)+1);
     assert(str!=NULL);
     for(i=0;i<strlen(str1);i++)
        str[i]=str1[i];
     for(j=0;j<strlen(str2);j++)
        str[i+j]=str2[j];
     str[i+j]='\0';
     return str;
}/*strConcat*/

/**controla se un file esiste
*@param nomeFile il nome del file
*@return OK se il file esiste, altrimenti KO
*/
int fileExist(const char *nomeFile){
    FILE *file;
    if((file=fopen(nomeFile,"r+b"))==NULL)
         return KO;
      else
          return OK;
}/*fileExist*/

/**La funzione taglia il file originale in file + piccoli con dimensioen scelta
*@param  pesoFile    dimensione di ogni parte del file in byte
*@param  nomefile[]  nome del file di input
*@return esito dell'elaborazione 
*/
int split(unsigned long int pesoFile,char nomeFile[]){
    FILE *in,*out;
    char buff;
    unsigned long int contaByte=0;
    unsigned long int contaFile=0;
    if((in=fopen(nomeFile,"rb"))==NULL){
        printf("%s",READ_ERROR);
        return 1;
    }/*Apertura file di input*/

    while(!feof(in)){
      if((out=fopen(strConcat(contaFile,EXTENSION),"wb"))==NULL){
        printf("%s",READ_ERROR);
        fclose(in);
        return 1;
       }/*apro un nuovo out ogni volta*/  
       
        while(contaByte<pesoFile && !feof(in)){             
          fread(&buff,sizeof(char),1,in);
          fwrite(&buff,sizeof(char),1,out);
          contaByte++;
        }/*end while fino ache non finisco i byte per questa parte*/
        
        contaByte=0;
        contaFile++;
        fclose(out);
    }/*end while*/

    fclose(in);
    fclose(out);
    return 0;
}/*split*/

/**La funzione unisce in un unico file le parti trovate
*@return esito dell'elaborazione 
*/
int join(){
    FILE *in,*out;
    char buff;
    unsigned long int contaFile=0;
    
    if((out=fopen("out","ab"))==NULL){
        printf("%s",READ_ERROR);
        return 1;
    }/*Apertura file di output*/
    
    do{
      if((in=fopen(strConcat(contaFile,EXTENSION),"rb"))==NULL){
        printf("%s",READ_ERROR);
        fclose(out);
        return 1;
       }/*apro un nuovo out ogni volta*/  
       
        while(!feof(in)){             
          fread(&buff,sizeof(char),1,in);
          fwrite(&buff,sizeof(char),1,out);
        }/*end while fino ache non finisco i byte per questa parte*/
        fclose(in);
    }while(!fileExist(strConcat(++contaFile,EXTENSION)));

    fclose(in);
    fclose(out);
    return 0;
}/*join*/


int main(int argv,char *argc[]){
   if(argc[3]!=""){
        if(!strcmp(argc[1],"-s")){
                if(atoi(argc[2])>0)
                     split(atoi(argc[2]),argc[3]);
                  else
                      printf("%s",SINTAX_ERROR);
        }else{
             if(!strcmp(argc[1],"-j"))
                 join();
               else
                  printf("%s",SINTAX_ERROR);}
    }else
       printf("%s",SINTAX_ERROR);
         
    return 0;
}/*main*/
il programma da dei problemi nelle giunzioni tra 2 parti di file, hio provato a splittare una immagine e poi a unirla, si vede, però nelel giunzioni tra le diverse parti ci sono alcuni errori. Non riesco a capire perchè

le uniche funzioni che potrebbero creare problemi sono join e split, le altre le ho testate.

per splittare digitare da linea di comando:
nomeProg -s numeroBytePerParte nomeFile

per unire + parti:
nomeProg -j


So che mancanop dievrse cose, ma mi interessava che generalmente funzionassero le funzioni per unire e tagliare poi tutta la gesione degli errori e gli abbellimenti li farò con calma.

Grazie per ogni suggerimento.

P.S.: ho usato i commenti javadoc perchè sono effettivamente molto leggibili