간단한 프로그램 만드는 방법으로 파일 입출력으로 자기 자신을 복사하는 프로그램을 만들고자한다.


 그냥 공부용으로 자기 자신을 복사하는 프로그램을 만들려고 한 것이다.


 방법은 엄청 복잡하지 않다.

 그냥 파일 입출력으로 자기 자신을 복사하는 프로그램을 만들려고한다.

 우리가 쉽게 배우는 fopen이나, fread, fwrite등을 이용할 것이다.


 fopen은 자기 자신을 열게 만들고, 자기 클론이 될 파일을 생성하고, 그 파일을 복사하는 형태를 취하게 할 것이다.


 간단하게 말해서 파일 복사 방식을 사용할 것이다.


 소스는 다음과 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>
 
#include <string.h>
 
#include <windows.h>
 
int main(int argc, char** argv)
{
    FILE *me = NULL;
    FILE *clone = NULL;
 
    char names[255= {0,};
    char buffer[1024= {0,};
 
    int read = 0;
 
    strcpy(names,argv[0]);
    strcat(names,".exe");
 
    me = fopen(argv[0],"rb");
    clone = fopen(names,"wb");
 
    while(read = fread(buffer,sizeof(char),1024,me)){
        fwrite(buffer,sizeof(char),read,clone);
    }
 
    printf("Hello world!\n");
    return 0;
}
 
 
cs


 간단하게 구현되어 있는 방법으로, 여기서 알아야 될 것은 main의 매개 변수이다.


 main의 매개 변수는 argc와 argv인데,

 argc는 해당 파일에서 명령을 입력하는 총 갯수를 뜻하고, argv는 그 명령의 내용을 뜻한다.


 즉, 명령 프로토콜(CMD)에서 명령이 main의 매개변수가 된다.


 예을 들어서

 clone.exe -A Next


 이렇게 입력을 했다면,

 argc는 3이라는 값을 가지게 되고, argv는 각각 "clone.exe" "-A" "Next" 을 가지게 된다.


 argv[0]는 정확하게는 실행시키는 파일의 최대 경로를 가지게 되어 있는게 맞다.


 자기 자신을 복사하는 프로그램은 딱히 쓸 일은 없지만, 파일 입출력과 argv을 이용해서 자기 자신을 복사할 수 있음을 알려주기 위해서 작성한 글이다.

Posted by JunkMam
,