프로그래밍

 3198, 1/160 회원가입  로그인  
   zeros47
   파일 분할 프로그램 질문드려요

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3117 [복사]


안녕하세요 조언해주신 대로 분할 합병함수는 완성을 하였습니다.



현재 메모리 사용에 관해 개선을 하고 싶은데요.



사용법은 사용자로부터 파일 이름과 분할 크기를 입력받아 특정 파일을 분할 하는 파일인데요.



원래는 지금 주석처리한 부분대로 buf라는 변수를 준 후 메모리 동적할당을 해서 사용자의 입력 크기만큼 한번에 데이터를



읽어왔는데 이런식으로 안하고 버퍼의 크기를 2kb로 제한해서 그만큼씩만 메모리 할당을 해서 읽어오려고 합니다.



그래서 for문으로 사용자의 입력 크기를 버퍼 크기로 나눈후 받아오려고 했는데 원하는 결과가 나오지 않네요.



어디가 문제인가요? 조언 부탁드립니다.



현재 OS는 우분투이며,



명령어 형태는 ./split test.txt 10을 입력하면



test.txt 원본 파일이 27kb일시



test.txt0 = 10kb

test.txt1 = 10kb

test.txt2 = 7kb



이런 형식입니다.

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#define BUF_SIZE 2048

int main(int argc, char *argv[])
{
        FILE *ifp, *ofp;
        int size = atoi(argv[2])*1024;
        char outline[50];
        char copy_buf[BUF_SIZE];
        int rdCnt, fileCnt = 0;
        int n_copy=0;
        long file_size;
        int i=0;
        int sum=0;

        //char *buf



        if(argc != 3)
                exit(-99);

        if(!(ifp = fopen(argv[1], "rb")) ) {
                printf("Open error\n");
                return 0;
        }

        //buf = (char*)mallor(size);
        while( (rdCnt = fread(copy_buf,1,BUF_SIZE,ifp))>0) {
                sprintf(outline,"%s%d",argv[1], fileCnt++);
                ofp = fopen(outline,"wb");
                sum = size/BUF_SIZE;
                for(i=0; i<sum; i++)
                {
                        fwrite(copy_buf,1,rdCnt,ofp);
                }
                fclose(ofp);
        }

        fclose(ifp);

        char rmrm[50];
        sprintf(rmrm, "rm -f %s", argv[1]);
        system(rmrm);
}


  Hit : 4207     Date : 2011/08/03 09:51



    
chaser1963 안돌려봐서 자세히는모르겠는데...
문제가 파일이 하나만 생성이 되지않나요?

파일포인터를 땡겨야되지않을까생각되네요 ~
2011/08/03