공유메모리를 이용한 파일전송을하는데 제대로 전송이 안되네요...

wildwar의 이미지

리눅스 환경에서 (우분투) 공유메모리를 이용한 파일전송을 만들고 있는데, (공유메모리를 이용한 채팅프로그램 상에서 구현입니다.) 문제 해결 방법을 도저히 못찾겠어서 질문 올립니다...

요구 조건은 sender가 특정 사용자에게 파일 전송 명령을 내리면

receiver가 전송받은 파일이름에 추가로 자신의 닉네임을 붙여서 저장까지 하는 프로그램입니다.

현재 파일 전송 시도시 새기는 문제는

1. 파일명이 깨집니다. ( 파일명에 " %&#$_받는사람닉네임 (잘못된 인코딩) ") 이라고 뜹니다.

2. 원본과 파일 크기가 다르고, 실행이 되지 않습니다.

쉽게 말해서 파일 생성까지는 되는데 다른 작업이 제대로 수행이 되지 않습니다..

제가 구현하려는 방법은 sender가 공유메모리 버퍼 상에 fread를 수행하여 데이터를 저장해 놓고

receiver가 자신의 닉네임을 붙인 파일명으로 파일을 생성해서 공유메모리 버퍼의 데이터를 꺼내오는 것입니다.

코드는 다음과 같은데.... 문제를 도저히 못찾겠습니다.

밑의 fileSend와 fileBuffer는 서로 같은 공유메모리 버퍼를 가리킵니다.

( receiver마다 고유의 파일 수신용 버퍼를 가집니다. )

( 제가 초심자라 코드가 많이 지저분한건 죄송합니다 ㅠㅠ )

도움주시면 정말 감사하겠습니다.

int rcvFile(){
 
 
    //부분생략, pathName은 기존에 sender가 입력한 pathName에 " _수신자명 " 을 붙였습니다.
 
 
 
 
    fp = fopen(pathName,"w");
    if(fp=='\0'){
        printf("pathname error\n");
        return 1;
    }
    //buf=malloc(BUFF_SIZE*BUFF_SIZE*BUFF_SIZE);
    printf("RCV START\n");
 
 
    fwrite(fileBuffer,1,sizeof(fileBuffer),fp);
 
    check=fwrite(fileBuffer,sizeof(char),BUFFER_SIZE+BUFFER_SIZE+BUFFER_SIZE,fp);
 
    fileUserList[userId]='0';
    fclose(fp);
    printf("RCV COMPLETE\n");
 
 
 
    return 0;
 
 
}
 
int sendFile(){
 
    //윗부분 생략, pathName은 터미널상에서 입력해서 들어옵니다.
 
    // send FIle //
    fp = fopen(pathName,"rb");
    if(fp=='\0'){
        printf("Check Pathname\n");
        return 1;
    }
    printf("get fp complete\n");
    printf("rcvId : %d\n",rcvId);
 
        printf("start fread\n");
        count = fread(fileSend,sizeof(char),10,fp);
 
        fileUserList[rcvId]='1';
 
    fclose(fp);
    printf("FILE SEND COMPLETE\n");
    printf("sender fileUserList : %c\n",fileUserList[rcvId]);
 
    return 0;
 
 
}

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.