CTime은 실질적으로 처음 사용하는 녀석인데.. 이름대로, Time/Date 관련 클래스이다.
사용방법은 매우 직관적으로
CTime::GetCurrentTime(); 를 사용하여 현재시간을 받아 온 후 GetYear() GetMonth() GetDay() GetHour() GetMinute() GetSecond()
메소드 들을 이용하여 시간 정보를 받아와서 사용하면 된다.
CFile 역시 실질적으로 처음 사용하는 녀석인데, 평소 습관대로 fopen()을 사용하려다
큰 마음먹고, MFC 답게 CFile 클래스로 처리해 보았다.
아무튼
CFile::modeWrite만 사용하면, Create가 되지 않아 파일이 없을 경우 에러가 발생한다.
CFile::modeCreate | CFile::modeWrite 를 사용하면, 덮어 써지는데 써진 내용이 이전에 쓰여진 내용보다 적으면 이전 내용이 남아 있는다. 비유를 하자면, 수정(Overlay)모드에서 가장 첫 줄 첫 칸부터 내용을 치는 것과 비슷하게 작동한다. 테스트 해봐야 하겠지만, 굳이 CFile::modeNoTruncate 를 사용하지 않더라도, SeekToEnd()만 적용해도(Create/Write 사용) 충분하지 않을까 생각이 된다.
(일단은)
구차니군은 전산학과를 졸업한 프로그래머다.
문제는 전산학과 + 프로그래머의 조합이라는 사실!
이건 마치 마린 + 메딕 조합에 버금가는 먼치킨으로 인식되는 게 현실이다.
아무튼 안구에 습기가 차게 되는 전산학과 공돌이의 생활로
"프로그램 언어들로 릴레이를 받으시지 않을까 싶은" 이라는 무한님의 기원을 담아 히위고~
{ /* start of fuction ListenProgrammersOTL */
people 구차니; switch(구차니)
{ case 0: // 전산학과는 컴퓨터 잘 다뤄
전산학과 특성상, 실은 컴퓨터를 많이 다루지 않는다.
컴퓨터공학과라면 프로그래밍도 죽어라 하고 땜질도 하고 그러는 걸로 알고 있지만,
전산학과는 말그대로 '학'이 들어가기 때문에, 순수학문적으로 접근을 한다.
예를 들어서 포토샾을 다뤄보세요~ 가 아니라
"포토샾 필터는 이런 원리로 작동하는 겁니다." 라던가
PC를 고치는 법은 이런 상황에서 이렇게 고치면 됩니다~ 가 아니라
"PC는 BIOS가 어쩌구 저쩌구 전자계산기는 가산기와 어쩌구 저쩌구... (니미!)" 이런 외계어를 듣는다.
그렇다고 해서 실습이 많은편도 아니다 보니, 수업 내용은 실질적으로 뜬구름을 잡는다고 보면된다. (솔찍히 소프트웨어 공학이랑, DB 이론, OS 이론 듣다 보면 뇌가 안드로메다로 가출한다. 자바도 구현을 위주로 한게 아니라 원리라던가 이런걸 중점적으로 배우고, DB 역시 수학적으로 어떻게 구현되는지 그렇다고 코드를 보고 하는것도 아니고 수식만 쓰는데다가, OS는 컴퓨터 하드웨어 구조부터 알아야 한다.. 선행수업을 안듣고 배우면 200배 힘들어짐)
그런데도 불구하고! 사람들은 전산학과 나왔다고 하면 모든지 잘할꺼라고 믿는다.
지나가는 행인 1 : 구차니씨 전산학과 나왔다며?
구차니 : 네에..
지나가는 행인 1 : 그럼 홈페이지도 잘 만들겠네?
구차니 : 할줄은 아는데요..
지나가는 행인 1 : 그럼 하나 만들어줘, ooo 사이트 처럼
구차니 : (낭러ㅣㄴ어리ㅓㄴ이런이러닝ㄹ) 그런건 못 만들어요 ^^;
지나가는 행인 1 : 아니 전산학과 나왔다면서 그정도는 해야지
구차니 : 전산학과는 만드는법을 배우는데지 만드는과가 아니거덩요
지나가는 행인 1 : 그게 그거지, 그것도 못하고 무슨 전산학과라
구차니 : (어림넝리ㅏㅓㅁㄴ이러니ㅏ얼 그럼 니가 만들던가!!!) 하하하 ㄱ-
이제 여러가지를 응용해보자.
구차니씨 스타 잘해? / 아니요 / 아니 전산학과가 스타도 못해?
구차니씨 PC 조립할 줄 알어? / 아니요 / 아니 전산학과가 PC도 조립 못하고 머에 써먹어?
구차니씨 PC 30만원에 조립해줘 / 에? / 아니 전산학과면 PC가격 다 꿰고 살잖아
구차니씨 PC 고장났어 고쳐줘 / 에? / 아니 전산학과라면 PC 고칠줄 알지 않아?
구차니씨 포토샾 잘해? / 아니요 / 아니 전산학과가 포토샾도 못해?
구차니씨 3DMAX 할 줄 알어? / 아니요 / 아니 전산학과가 3DMAX도 안배워?
구차니씨 php,asp,jsp 할 줄 알어? / 아니요 / 아니 전산학과가 홈페이지도 안만들고 모했대?
구차니씨 포맷할 줄 알어? / 아니요 / 아니 전산학과가 포맷도 못해?
구차니씨 리눅스 쓸 줄 알어 / 아니요 / 아니 전산학과가 리눅스도 못써?
구차니씨 윈도우 서버 쓸 줄 알어? / 아니요 / 아니 전산학과가 윈도우 서버도 안써?
break;
/*
[구차니군은 총 두번 정도 맞고(학고는 아님 -ㅁ-!), CD 플레이어를 애용하였습니다!]
*/
case 1: // 프로그래머는 서버도 잘 다뤄
원래대로라면, (아주 큰 대기업이나 미쿡같은 분업화된 곳) 개발자 따로, 개발환경 구축 따로인데,
우리 나라는 개발자가 북치고 장구치도 전부 다하다 보니, 아래와 같은 일이 생긴다.
미국 에 출장온 한국 개발자들 미국 개발자들 일단 창고에 짐을풀라고 애기하자 영어를 못알아듣고 그곳에 프로젝트 룸인줄 알고 컴퓨터 세팅에 심지어 랜선 설치한다고 천장까지 타서 프로젝트 룸으로 세팅하자 미국 업체 떡실신
[출처 : 데브피아 / 개발자 떡실신 시리즈]
아무튼, 중소기업 혹은 소기업 혹은 마이크로 미니 나노 기업에서는 개발자 = 서버 관리자 역활을 하게 된다.
얼마전 실제 있었던 일인데...
리눅스 설치 + 개발 환경 설치 + 백업본 복구 에 반나절.. OTL 털썩
아무튼 개발자가 PC를 잘다루는 편인건 맞지만, 전반적으로 모든 개발자가 고르게
모든 OS를 다룰줄 아는건 아니라는 사실!!!
사족 : 학교에서 Windows 2003 IIS 관련해서 까지는 만져봤..
라고 이야기 하면 그럼 윈도우 서버도 할줄 아는게 되는 대한민국 OTL /*
리눅스 할 줄 알면 윈도우는 기본이죠? 네? 누가 그래요?!?!
*/ break;
case 2: // 컴퓨터를 싸게 조립하는 비법은 전산학과에게?! 엥? case 3: // 컴퓨터를 조립해주었다. 그런데 그게 끝이 아니라고?!
허구한 날 메신저가 띠링거리면 이유는 대부분 두가지다.
1. 컴퓨터 사야 하는데 얼마면 돼? (나한테 돈주고 조립에 배송에 셋팅까지 해달라고?) -> 최소한 용도와 제한금액을 말해달라!!!
-> 그러면서 금액은 쥐꼬랑지, 돌리고 싶은건 초호화 게임이라면 죽이고 싶다 ㄱ-
-> 들어간만큼 성능을 뽑아 주느게 컴퓨터다. 10만원이면 딱 10만원짜리 성능이 나온다.
-> 아무리 오버클럭하고 튜닝해도, 50cc 오토바이 엔진으로 탱크 못 움직인다.
2. 컴퓨터 고장났는데 고쳐줘 (아니 증상을 말하라고!!!) -> 컴퓨터 만든 사람 불러와도 증상을 알아야 고치지!!!
-> 제발 고장났으면 머하다가 어떤증상이 보여서 고장난거 같다는 이야기를 해달라!
-> 컴퓨터 하드웨어적인 고장은 극히 드물고, 대부분이 설정 문제이므로 폭발하지 않는다.
-> 그리고 고장났다고 고쳐주는 사람이 욕하지 않으니 당당하게 이야기 해라.
-> 그렇다고 해서 당당하게 공짜로 고쳐달라고 하면 뒤.진.다.
그리고 그 사람들이 요청하는 이유는 한가지다.
전산학과면 컴퓨터 시세 꿰고 살잖아. 그럼 싸게 사는거구. 그러지 말구 하나 해줘.
전산학과면 컴퓨터 잘 알잖아. 얼마나 오래걸린다고 후딱 고쳐줘.
우스개 소리로, 미쿡에서는 막힌 하수도 망치질 한번에 돈 받아 먹고 갔다는 이야기도 있지만,
대한민국 전산학과생/개발자/컴퓨터숙련자들은 순딩이 같이 바보 같아서
돈도 안받고, 무상으로 노동력을 착취당해준다.
아무튼, 힘들게 힘들게 돈을 맞추어서 한대 사주고 나면,
컴맹답게 허구한날 윈도우 박살내고, 포맷을 해도 한동안 비정상 작동을 하게 하며,
아주 드물지만 하드웨어를 박살내는(순수하게 키보드만 두드렸는데!) 능력자들이 있다.
그리고 그들은 외친다.
컴 맹 : 구차니군~ 너가 전에 맞춰준 컴퓨터 고장났어. 고쳐주러와~
구차니 : 나 바쁘거덩? 그리고 조립비도, 설치비도 안 받았는데 먼 소리여 ㄱ-
솔찍히 그래도 책임감에 고쳐주러 가지만. 심기는 매우 불편하다.
밥이라도 주면서 시키던가!!!!
그리고 대학교 때 당한 일인데.. 시험기간은 다가오고 컴퓨터 고장나는 넘들이 한두넘이 아닌데,
내 시간 할애하면서 고쳐주고 다니고, 나중에 들어쳐 잡수신 욕은 ..
(결국에는 내 공부 못한.. 미네랄!)
야! ooo 꺼는 고쳐주고 내꺼는 왜 안고쳐 주는데?
솔찍히 그 소리 듣고, 다시는 아는 사람이라도 컴퓨터 손봐주지 않겠다고
1학기 동안 다짐을 하고, 그냥 은둔생활을 했었으니 정신적 피해는 어마어마 했다.
무상으로 노동력과 기술력을 제공하는 친구들에게 하다못해
따뜻한 구내식당 밥 한끼라도 보태주면 감사하겠다.
아무튼, 전산학과/개발자가 항상 시세를 보고 사는것도 아니고,
그렇다고 해서 모든 제품을 사용해 본 것도 아닌데, 그렇게 생각하는 사람들의 뇌를 가끔은 분해해보고 싶다. /*
자 보라고! 전산학과다운 망치질을!!!
아니 개발자도 똑바로 봐!!!
*/ break;
case 4: // 인터넷이 안되는건 인터넷 회사에 항의하세요!!! ㅠ.ㅠ
가끔은 고쳐주거나 손봐주기는 하지만, 왜!!!! 이걸 나한테 물어 보는지 저의가 궁금하다.
모뎀에 보면 친절하게 1588 전화번호가 있는데도 불구하고 왜 전산학과라는 이유로 물어 보는가!?
물론, 나도 초고속 인터넷 사용하는 유저로서 그 기사분들이 매우뛰어난 실력을 지닌건 아니란건 알지만
솔찍히 인터넷 안되는거랑 PC랑은 별개고, 인터넷은 망사업자에게 문의를 해야 함에도 불구하고
편하고 빠르다는 이유로(나 5분 대기조 아니거덩?) 내 번호를 누른다.
웬 수 : 구차니군 인터넷이 안돼! 어떻게 해야해?
구차니 : 그냥 모뎀 껐다켜 그럼 돼
웬 수 : 모뎀이 먼데?
구차니 : 바닥에 선 따라 가면 있어 찾아봐
웬 수 : 어 된다 쌩유~
뚝!
구차니 : ... 이 브라질리언 십센치가 ㄱ-
눌러라!!! 그러면 고쳐주러 올 것이다!!! 아니아니 내 핸폰 번호 말구!!! 거기 보이지? 1588 번호!!! break;
case 5: // 개발자는 모든 언어의 프로그래밍을 할 줄 안다?
개발자 구인을 보면 느끼는 거고, 면접을 보면서 느끼고, 일을 하면서 느끼는 거지만..
전산학과 출신/개발자들은 모든 언어를(영어 빼고) 섭렵하고 있을꺼라는 환상을 가진 것으로 보인다.
일반적으로 할줄 아는 것으로 생각되어지는 언어는
Visual Basic
Visual C++
JAVA
JSP / ASP / PHP / 홈페이지 (이건 HTML만 하면 다 만드는줄 안다)
플래시 (이건 언어라고도 생각 안한다지?)
아무튼 솔찍히 하나의 언어를 파고 드는데만도 몇년이 걸리고,
제대로 사용할 줄 아는데에는 몇년이 더 걸릴지도 모르는데
문법만 안다고 언어를 안다고 생각하는 부류와(개발자중에) 저렇게 많은 언어를 다룰줄 아는
다재다능한 인재를 뽑으려는 기업들을 보고 있으면 한숨만 나온다.
아무튼 한 가지만 할 줄아는 것보다 여러가지 할 줄 알면 좋겠지만,
그래도 하나라도 제대로 할 줄 아는게 더 중요하지 않을까 생각이 된다.
왜냐고?
Java를 C처럼 쓰게 되는 일이 발생하거든 -ㅁ-!
읽어 볼 만한 내용은 아래를 참조!!
프로그래머에요~ 개발자에요~ 라고 하면 다들 이소리를 왜 나한테 하는지 모르겠다.
1. 윈도우 뻑났어 고쳐줘 - 난 MS 개발자가 아니거든?
2. 아래한글이 제대로 안돼 이 기능 마음에 안들어! - 나 한글과컴퓨터 직원아니다 ㄱ-
3. 네비게이션 어떻게 사용해? - 아부지 전 네비 직원 아니어라!! (이건 직접 경험 울 아부지 .. OTL)
4. 그럼 너 개발하는게 먼데? - 물어 본거 빼고 -ㅁ-
솔찍히 워낙 방대해져서, 프로그래밍이라고 해도 자기자신이 파고 들 수 있는건 한계가 있고
예를들어, 네트워크 프로그래밍만 죽어라 팔 수 도 있는거고,
커널 프로그래밍, UI 프로그래밍, 비디오 프로그래밍(이미지 프로세싱), 오디오 프로그래밍(TTS 등)
게다가 OS별로 리눅스, 윈도우(Win32 / Win16 / WinCE 등등등), 도스, 솔라리스 등으로 또 나뉘는 데다가
리눅스라고 해도 그냥 표준 Ansi인지, GTK인지 Tcl/Tk인지 파이썬인지 언어도 천차만별이고
나열하는 도중에도 듣도보도 못한 언어가 생겨날테고, 수많은 분야가 생겨 날텐데
도대체 프로그래머라고 하면 모든 걸 만들어 낼 수 있다고 생각하는 걸까?
#include "stdio.h"
#include "unistd.h"
int main()
{
pid_t pid;
pid = fork();
switch( pid)
{
case -1: // fail
case 0: // child
default: // parent
break;
}
}
개략적인 코드는 위와 같은데,
왜! switch 문데 child와 parent가 동시에 들어가는지에 대해서 생각을 해보도록 하자.
일단 fork() + exec() 의 조합으로 쓰게 되는데,
fork()는 프로세스를 생성하고, exec()는 프로그램을 바꾸어서 실행하는 역활을 한다.
다시 앞을 자세히 보자.
프로세스를 생성한다.
어려운 이야기를 제외하고, 프로세스는 메모리상에 올라와있는(적재되어 있는, 혹은 메모리에 load된)
프로그램으로, 프로세스를 생성하는 가장 편한 방법은 복사이다.
현재 수행중인 프로세스의 내용을 그대로 복사해서 다른 pid를 준다.
그게 바로 fork 이고, 위의 switch문을 이해할 수 있는 키가 된다.
굳이 비유를 하자면, 예전에 일요일에 했던 이휘재가 그래 결정했어! 를 외치던 그 프로그램을 떠올려 보자.
어느 시점에서 그대로 복제한 메모리의 정보가 생성이 되었고
그 분기점에서 어느길을 택할지를 결정하여 주면, 각각의 프로그램이 따로 돌아가게 된다.
즉, 복사한 시점에서 표지판 역활을 해주는 것이
fork()의 리턴값인 pid_t 형의 pid 이고,
이 값이 어느 쪽으로 분기되어 갈지를 결정하게 해주는 것이다.
그런 이유로, Parent, Child 의 코드가 하나의 소스에 들어 있게 되고
별거 아닌 것 같지만, 상당히 헷갈리는(왜 코드가 하나에 들어 있지?) 이유가 된다.
flock은 이름대로 파일 디스크립터를 lock 하거나 unlock 하는데 사용한다.
멀티 유저/ 멀티 프로세스 OS인 관계로 Linux/Unix에서는 열린 파일도 여러사람이 또 열어서 쓸 수 있는데
다르게 말하자면 시리얼 포트 역시 동시에 여러사람이 열어서 사용이 가능하다는 의미이다.
하지만, 시리얼 포트를 동시에 여러 사람이 열어서 사용하다 보면 문제가 발생할 수도 있기에
(내용이 서로 엇갈린다던가) 특정 시기에 대해서는 타인이 사용하지 못하도록 배타적으로 잠궈야 할 때도 있다.
int flock(int fd, int operation);
LOCK_SH
Place a shared lock. More than one process may hold a shared lock for a given file at a given time.
LOCK_EX
Place an exclusive lock. Only one process may hold an exclusive lock for a given file at a given time.
LOCK_UN
Remove an existing lock held by this process.
문득, 내가 잘 하는게 머가 있나?
내가 좀 한다고 생각했던것들이 무슨 의미가 있나? 라는 생각이 든다.
막상 이력서 던져놔봐도 떡밥을 물어 보는 곳도 없고..
개발자라는 굴레에서 다른 영역으로 이전시에는 경력은 사라지고 신입으로 가야 하는 현실
그리고 실력은 시간이 지나면 빛을 본다지만,
그렇다고 게임에서 레벨업을 하듯 띠링~ 이펙트와 함께 월급도 상승하는 것도 아니고
결국은 입사시에 월급일테고..
너무 비관적인가?
비관을 넘어서 이제 허무주의로 치닫고 있는 내 정신상태에
이러한 퇴행을 막아줄 정신의 못이 필요할 듯 한데...
휴식이 되어줄지
아니면 대학원이 되어줄지
그것도 아니라면 이직/전직이 되어줄지...
문득 반문명주의가 되는건 아닐까 라는 생각조차 든다.
인류가 세워왔다는 문명과 과학 기술들이 과연 얼마나 의미가 있는 것일까?
내가 무언가를 할 줄 안다는 건 어떤 의미가 있을까?