답변이 늦어 죄송합니다. 우선 말씀 주신 소스를 보면서 제일 먼저 생각나는 것은
프로토콜이 구성되어 있지 않다는 것을 말씀 드리고 싶습니다.

시리얼 통신은 매우 저렴한 통신 방식인 만큼 자료 전송의 안정성과 효율성은
모두 프로그래머가 책임져 주어야 합니다.

우선 상대측에게 자료 전송의 시작을 알려 주셔야 하며, 수신하는 쪽은 제대로 수신했음을
알려 주어야 합니다. 다시 송신하는 쪽은 수신 쪽이 수신 여부를 확인해야 되겠죠.

이렇게 하기 위해서는 파일을 한 번에 모두 전송하는 것이 아니라 일정 버퍼 크기에 맞추어
하나씩 잘라 내어야 하고, 이 일부분을 보낼 때 마다 상대측의 수신 상태를 확인해야 합니다.

이것이 곧 프로토콜인데요, 상대측의 수신 여부를 확인하지 않는 상태에서 계속 전송하면
전송한 자료는 제대로 송신되었는지 알 수 가 없는 상태에서 통신 중에 손실되는 경우가 많습니다.

그러므로 먼저 프로토콜을 학습하시기를 권하고 싶습니다. 다행히 여기 강좌 게시판에
프로토콜에 대한 말씀을 올렸습니다.

http://forum.falinux.com/bbs/zboard.php?id=lecture2&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&keyword=프로토콜&select_arrange=headnum&desc=asc&no=166

http://forum.falinux.com/bbs/zboard.php?id=lecture2&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&keyword=프로토콜&select_arrange=headnum&desc=asc&no

먼저 위의 2개의 문서를 참고하시기 바랍니다.

>시리얼로 파일을 주고 받기위해서 일단 테스트 삼아 만들어본건데 문제가 많습니다.
>
>깨진 문자가 들어가고
>파일이 전부 다 전송되지 않고
>원본 파일과 줄바꿈 위치가 다릅니다.
>
>받는 쪽에서 일단 동작하고  보내는 쪽에서 파일을 오픈하여 전송하는 방식입니다.
>한번 확인 해주셨으면 합니다.
>
>
>받는 쪽 소스
>
>========================================
>#include <stdio.h>
>#include <stdlib.h>
>#include <unistd.h>
>#include <string.h>
>#include <sys/wait.h>
>#include <fcntl.h>
>#include <termios.h>
>
>#include <stddef.h>
>#include <sys/types.h>
>#include <sys/stat.h>
>#include <dirent.h>
>
>#include <errno.h>
>#include <time.h>
>
>#define BAUDRATE B115200
>#define MODEMDEVICE "/dev/ttyS0"
>#define _POSIX_SOURCE 1
>
>#define FALSE 0
>#define TRUE 1
>#define CRTSCTS 020000000000
>#define MAX 255
>#define DATA_MAX 20
>#define GET_DONE 0
>
>////////////////////////
>FILE *fp1;
>FILE *fp2;
>
>long buffsize = 0;
>
>long lFilesize = 0;
>long rFilesize = 0;
>
>char serial_buf[MAX];
>int fd;
>int res;
>struct termios oldtio,newtio;
>//////////////////////////////////////////////////////////////////
>
>void serial_open()
>{
>
>        fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );
>        if (fd <0) {perror(MODEMDEVICE); exit(-1); }
>
>        tcgetattr(fd,&oldtio);
>        bzero(&newtio, sizeof(newtio));
>
>        newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
>
>        newtio.c_iflag = ICRNL;
>
>        newtio.c_lflag = ICANON;
>
>        tcflush(fd, TCIFLUSH);
>        tcsetattr(fd, TCSANOW, &newtio);
>
>}
>
>void serial_close()
>{
>        tcsetattr(fd,TCSANOW,&oldtio);
>        close(fd);
>}
>
>int get_data ()
>{
>        fp2 = fopen("c","wb"); // 파일을 복사할때는 binary 모드로 여는 편이 좋아요
>        rFilesize = 72;
>        while(rFilesize > 0)  // 파일 크기만큼 반복
>        {
>                fread(serial_buf, buffsize, 1,fd);
>                printf("1%s1",serial_buf);
>                write(fp2,serial_buf, sizeof(serial_buf));
>
>                rFilesize --;
>                bzero(serial_buf,MAX);
>        }
>
>        return 0;
>}
>
>int main()
>{
>        serial_open();
>        fp2 = fopen("c","wb");
>        res =0;
>
> while(        read(fd,serial_buf,DATA_MAX)) {
>                printf("%snn %d",serial_buf,res);
>                fwrite(serial_buf,MAX-50,1,fp2);        
>                bzero(serial_buf,MAX);
>        }
>
>        return 0;
>}
>===========================================
>
>보내는 쪽 소스
>
>========================================
>#include <stdio.h>
>#include <stdlib.h>
>#include <unistd.h>
>#include <string.h>
>#include <sys/wait.h>
>#include <fcntl.h>
>#include <termios.h>
>
>#include <stddef.h>
>#include <sys/types.h>
>#include <sys/stat.h>
>#include <dirent.h>
>
>#include <errno.h>
>#include <time.h>
>
>#define BAUDRATE B115200
>#define MODEMDEVICE "/dev/ttyS1"
>#define _POSIX_SOURCE 1
>
>#define FALSE 0
>#define TRUE 1
>#define CRTSCTS 020000000000
>#define MAX 255
>#define DATA_MAX 20
>#define GET_DONE 0
>
>////////////////////////
>FILE *fp1;
>FILE *fp2;
>
>long buffsize = 0;
>
>long lFilesize = 0;
>long rFilesize = 0;
>
>char serial_buf[MAX];
>int fd;
>int res;
>struct termios oldtio,newtio;
>//////////////////////////////////////////////////////////////////
>
>void serial_open()
>{
>
>        fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );
>        if (fd <0) {perror(MODEMDEVICE); exit(-1); }
>
>        tcgetattr(fd,&oldtio);
>        bzero(&newtio, sizeof(newtio));
>
>        newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
>
>        newtio.c_iflag =  ICRNL;
>
>        newtio.c_lflag = ICANON;
>
>        tcflush(fd, TCIFLUSH);
>        tcsetattr(fd, TCSANOW, &newtio);
>
>}
>
>void serial_close()
>{
>        tcsetattr(fd,TCSANOW,&oldtio);
>        close(fd);
>}
>
>void send_data( )
>{
>
>        fp1 = fopen("a","rb");
>        if( fp1 == NULL )
>        {
>                exit(0);
>        }
>
>        fseek(fp1, 0, 2);
>        lFilesize = ftell(fp1);
>        fseek(fp1, 0, 0);  
>        res = 0;
>
>        while(lFilesize > 0)
>        {
>                if(lFilesize > DATA_MAX)
>                        buffsize = DATA_MAX;
>                else
>                        buffsize = lFilesize;
>
>                fread(serial_buf, buffsize,1,fp1);
>                printf ( "%s",serial_buf);
>                write(fd,serial_buf,buffsize);
>
>                lFilesize -= buffsize;
>
>                bzero(serial_buf,MAX);
>        }
>
>        bzero(serial_buf,MAX);
>        fclose(fp1);
>}
>
>
>int main()
>{
>        serial_open();
>        send_data();
>        return 0;
>}
>===========================================