시리얼로 파일을 주고 받기위해서 일단 테스트 삼아 만들어본건데 문제가 많습니다.

깨진 문자가 들어가고
파일이 전부 다 전송되지 않고
원본 파일과 줄바꿈 위치가 다릅니다.

받는 쪽에서 일단 동작하고  보내는 쪽에서 파일을 오픈하여 전송하는 방식입니다.
한번 확인 해주셨으면 합니다.


받는 쪽 소스

========================================
#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;
}
===========================================