간단한 프로그램 만드는 방법으로 파일 입출력으로 자기 자신을 복사하는 프로그램을 만들고자한다.
그냥 공부용으로 자기 자신을 복사하는 프로그램을 만들려고 한 것이다.
방법은 엄청 복잡하지 않다.
그냥 파일 입출력으로 자기 자신을 복사하는 프로그램을 만들려고한다.
우리가 쉽게 배우는 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을 이용해서 자기 자신을 복사할 수 있음을 알려주기 위해서 작성한 글이다.
'연습' 카테고리의 다른 글
GCC에서의 Inline ASM (0) | 2015.11.27 |
---|---|
Hello World를 어셈블리어로 변환한 결과. (0) | 2015.11.26 |
Hexa Code Editor 만들기 -키보드 입력 인식- (0) | 2015.11.24 |
Hexa Code Editor 만들기 -Windows에서 DOS 커서 이동.- (0) | 2015.11.23 |
Hexa Code Editor 만들기 -이진 파일 출력.- (0) | 2015.11.22 |