악랄하신 무한님에게 점지당하여 바통을 넘겨 받게 된 구차니입니다. -ㅁ-!
무한님의 센스에 비하면 타우렌 2000mg 부족하니 많은 양해를 부탁드립니다

[출처 : 불명 + 이것저것 합성]
[부제 : 힘이여 솟아라! 타우렌 300mg 함유 비타500!!!]

(일단은)  구차니군은 전산학과를 졸업한 프로그래머다.
문제는 전산학과 + 프로그래머의 조합이라는 사실!
이건 마치 마린 + 메딕 조합에 버금가는 먼치킨으로 인식되는 게 현실이다.

아무튼 안구에 습기가 차게 되는 전산학과 공돌이의 생활로
"프로그램 언어들로 릴레이를 받으시지 않을까 싶은" 이라는 무한님의 기원을 담아 히위고~



[편견타파 릴레이]

1. 자신의 직종이나 전공때문에 주위에서 자주 듣게 되는 이야기를 써 주세요.
2. 다음 주자 3분께 바톤을 넘겨주세요.
3. 마감기한은 7월 31일까지 입니다.

흐음.. 다음 타자 세명이나 지목하는게 상당히 껄끄러운 -ㅁ-
변방의 블로거이다 보니.. 인맥이 없.. OTL!!!!

떠넘길 사람 세분은 버퍼링중 -ㅁ-

+_+!

1. Kay~ 님 :: 라라윈님의 블로그에 남기신 소망을 이루어 드리겠습니다 ㅋㅋ
2. okto 님 :: 떠넘기기 스킬 시전입니다!!!
3. bluenlive 님 :: okto 님을 지명하는데 웬지 빠져서는 안 될 느낌이 ㅋ

Posted by 구차니
Linux API/network2009. 6. 23. 00:50
fork()는 리눅스 시스템 콜로서, 프로세스를 생성한다.

#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 의 코드가 하나의 소스에 들어 있게 되고
별거 아닌 것 같지만, 상당히 헷갈리는(왜 코드가 하나에 들어 있지?) 이유가 된다.

[링크 : http://linux.die.net/man/2/fork]

'Linux API > network' 카테고리의 다른 글

Linux File Descriptor / File pointer  (0) 2009.06.30
getline()  (0) 2009.06.25
signal / kill / raise  (0) 2009.06.21
flock - apply or remove an advisory lock on an open file  (0) 2009.06.20
네트워크 장치 갯수 얻기 (get amount of eth?)  (0) 2009.06.18
Posted by 구차니
바코드 리더 관련 정보는 정말 눈 씻고 뒤져봐도 안나온다.
이유는 간단하다.

바코드 리더 = 특화된 키보드

메뉴얼을 읽어 보면
prefix / suffix가 존재하고, 이에 따라서 처리방법이 조금씩 달라지지만,
PS/2 방식의 바코드 리더의 경우에는 실질적으로 키보드와 다를바가 전혀없다.
그렇게 때문에, 바코드 리더 프로그래밍이란 것은 실질적으로 존재하지 않는 것이다.


prefix - 접두어(잘 쓰이는지는 모르겠지만, STX 가 있는것 봐서는 RS-232 시리얼 통신 표준을 맞추는데 사용하는 것 같다)
suffix - 접미어 (예를 들어 엔터 몇번이냐, 엔터를 어떤걸로 - CR/LF - 처리하냐 정도의 차이)


[링크 : http://www.iepos.com/support/symbol/ls1004userprogrammermanual.pdf]

'모종의 음모 > 바코드 리더' 카테고리의 다른 글

MFC 에서 바코드리더 메시지, 버츄얼 키  (0) 2009.06.17
바코드 폰트 (code 39)  (0) 2009.06.15
barcode reader - PS/2 type  (2) 2009.06.12
Posted by 구차니
Programming/C Win32 MFC2009. 6. 22. 15:57

int nCount = m_var1.GetCount();
if (nCount > 0)
 m_var1.SetCurSel(nCount - 1);

간단하게 구현되는데, 깔끔하지는 않다.
(무조건 마지막꺼를 선택하게 해서 강제로 스크롤 되기 때문에, 중앙에 놔두었을때 멈춰있지 못하다)

[링크 : http://social.msdn.microsoft.com/forums/en-US/vssmartdevicesnative/thread/9e54372f-c784-4c8f-ab4c-adc6bbe8810a]

'Programming > C Win32 MFC' 카테고리의 다른 글

CTreeCtrl - 트리구조로 데이터 넣어주기  (0) 2009.07.13
CFile / CTime  (0) 2009.06.23
MFC PreTranslateMessage() 리턴값의 의미  (0) 2009.06.17
signed type의 %X 출력  (0) 2009.06.17
CEdit Multiline사용시 개행 방법  (0) 2009.06.17
Posted by 구차니
프로그램 사용2009. 6. 22. 14:12
ZOC Terminal은 Shareware이다(탈락!!!)


[링크 : http://www.fileguru.com/ZOC-Terminal/info]



은근히 Freeware로 탭 지원되는 터미널 에뮬레이터가 없다는 사실에 놀랐다 -ㅁ-
음... CSerial도 여러개의 인스턴스를 사용할 수 있다면 간단하게 구현이 가능할텐데..
한번 공부할 겸 시간내서 만들어 볼까나?
Posted by 구차니
Linux API/network2009. 6. 21. 13:04
signal - ANSI C signal handling
kill - send signal to a process
raise - send a signal to the current process

signal()은 시그널 핸들러를 등록하고
 #include <signal.h>
 sighandler_t signal(int signum, sighandler_t handler);

kill은 시그널 을 전송하고
 #include <sys/types.h>
 #include <signal.h>
 int kill(pid_t pid, int sig);

raise는 자기자신에게 시그널을 전송한다.
 #include <signal.h>
 int raise(int sig);
 kill(getpid(), sig);

아무래도, pid 단위로 시그널을 전송함으로서 제어에 상당한 제약이 있을것으로 보인다.
그리고 쓰레드는 2.5 커널 이상 부터는 pid가 동일하게 나온다고 한다.
[링크 : http://kldp.org/node/35609]

*** man page ***
[signal(2) : http://linux.die.net/man/2/signal]
[kill(2) : http://linux.die.net/man/2/kill]
[raise(2) : http://linux.die.net/man/3/raise]

*** joinc wiki ***
시그널 처리하기
시그널 사용하기 1
시그널 사용하기 2
리눅스 시스템 프로그래밍 6장 시그널

'Linux API > network' 카테고리의 다른 글

getline()  (0) 2009.06.25
fork에 관한 짧은 이야기  (2) 2009.06.23
flock - apply or remove an advisory lock on an open file  (0) 2009.06.20
네트워크 장치 갯수 얻기 (get amount of eth?)  (0) 2009.06.18
gateway 정보  (0) 2009.06.05
Posted by 구차니
Linux API/network2009. 6. 20. 18:55
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.

[링크 : http://linux.die.net/man/2/flock]

LOCK_EX로 하면 자기만 쓸 수 있도록 잠그는 것이고,
LOCK_UN으로 잠금을 해제 한다.



[링크 : http://feedtome.springnote.com/pages/141729]
[링크 : http://stackoverflow.com/questions/691676/getting-exclusive-access-to-a-tty-device-from-a-root-program-on-linux]

'Linux API > network' 카테고리의 다른 글

fork에 관한 짧은 이야기  (2) 2009.06.23
signal / kill / raise  (0) 2009.06.21
네트워크 장치 갯수 얻기 (get amount of eth?)  (0) 2009.06.18
gateway 정보  (0) 2009.06.05
linux에서 ip/mac address 받아오기 관련 링크  (0) 2009.06.05
Posted by 구차니
개소리 왈왈2009. 6. 20. 10:13
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.
쉬고싶다.





출근하기 싫어서 이러는거 절대아님 -ㅁ-!

문득, 내가 잘 하는게 머가 있나?
내가 좀 한다고 생각했던것들이 무슨 의미가 있나? 라는 생각이 든다.

막상 이력서 던져놔봐도 떡밥을 물어 보는 곳도 없고..
개발자라는 굴레에서 다른 영역으로 이전시에는 경력은 사라지고 신입으로 가야 하는 현실
그리고 실력은 시간이 지나면 빛을 본다지만,
그렇다고 게임에서 레벨업을 하듯 띠링~ 이펙트와 함께 월급도 상승하는 것도 아니고
결국은 입사시에 월급일테고..

너무 비관적인가?

비관을 넘어서 이제 허무주의로 치닫고 있는 내 정신상태에
이러한 퇴행을 막아줄 정신의 못이 필요할 듯 한데...

휴식이 되어줄지
아니면 대학원이 되어줄지
그것도 아니라면 이직/전직이 되어줄지...


문득 반문명주의가 되는건 아닐까 라는 생각조차 든다.
인류가 세워왔다는 문명과 과학 기술들이 과연 얼마나 의미가 있는 것일까?
내가 무언가를 할 줄 안다는 건 어떤 의미가 있을까?

이러다가 머리 밀고 도 갂으러 가는건 아닐런지...
Posted by 구차니
Linux2009. 6. 19. 23:44
결국에는 어떤 값들을 처리해주고(tty 관련) 정도의 차이지
버퍼링 되는 것은 동일하고, 생각만큼 큰 차이는 없다고 한다.


일단 테스트 해본결과, canonical 입력의 우선순위가 더 높아 보였다.

#include "stdio.h"
#include "fcntl.h"
#include "sys/types.h"
#include "sys/stat.h"

void main() { char buf; // char buf[16]; int fd, ret;
fd = open("/dev/ttyS0", O_NOCTTY | O_NONBLOCK | O_RDWR); printf("fd[%08X]\n",fd);
while(1) { ret = read(fd, &buf, 1); // ret = read(fd, &buf, 10); if(ret > 0) printf("ret[%d] buf[%s]\n",ret,buf); }
}

위의 소스는 넌블러킹 모드로 하나의 문자를 받는 예제이다.
테스트 방법은
PC 1. 하이퍼터미널로 연결
PC 2. minicom 으로 연결
PC 2. 터미널에서 특정 포트 출력 (echo test string > /dev/ttyS0)
PC 2. 터미널에서 위의 프로그램 실행

sdfasfsadfsadfasfasfasfasfsadf

 CTRL-A Z for help |115200 8N1 | NOR | Minicom 2.3    | VT102 | Online 00:15

ret[-1] buf[▒]
ret[-1] buf[▒]
ret[-1] buf[▒]
ret[-1] buf[▒]
ret[-1] buf[▒]
ret[-1] buf[▒]
ret[-1] buf[▒]
ret[-1] buf[▒]

...

fd[00000003]
ret[1] buf[i]
ret[1] buf[ ]
ret[1] buf[a]
ret[1] buf[m]
ret[1] buf[ ]
ret[1] buf[a]
ret[1] buf[ ]
ret[1] buf[b]
ret[1] buf[o]
ret[1] buf[y]

...

ret[8] buf[this is ]
ret[10] buf[test strin]
ret[2] buf[g st strin]

테스트 1.
두개의 PC를 시리얼로 연결해 놓은 상태(canonical mode?)에서 다른 터미널에서
echo test string > /dev/ttyS0
명령을 수행하여 출력 :: 시리얼을 연채로 똑같은 포트를 또 열어서 출력 가능 함
(둘다 canonical mode로 추측됨)

테스트 2.
non-canonical mode로 터미널에서 키를 입력 받는 위의 소스코드를 실행하여,
원격지에서 하이퍼터미널로 키 입력을 받는지 테스트 함.
두개만 있을때에는 이상없이 작동

테스트 3.
테스트 2 상황에서 minicom을 실행시킴
 ret[-1] buf[▒]
이런식으로 에러가 발생하고 키를 입력 받을 수 없음.

테스트 4.
위의 상황에서 minicom 종료 함.
이상없이 메시지 받을 수 있음.

테스트 5.
반대로 minicom을 구동한 상황에서 소스코드를 실행시킴
메시지를 받을 수 없음 (minicom 쪽이 우선적으로 메시지 받을 수 있음)

테스트 6.
한 바이트씩 받지 않고 10바이트씩 받는 테스트,
하이퍼터미널에 10글자 정도의 문장을 복사하여 한번에 붙여 넣었는데 10글자를 한번에 받지 못하고
이상하게 받아 들이게 됨. non-blocking 에서는 되도록이면 한 문자씩 버퍼에 받아야 할 듯 함.

결론: canonical 입력은 non-canonical 보다 우선적으로 받을 수 있는 것으로 보임.
       캐노니컬 / 넌캐노니컬과는 상관없이 블러킹 / 넌-블러킹 연관이고
       블러킹이 넌-블러킹 보다 우선적으로 보내고/받을 수 있는 것으로 보임.

[링크 : http://stackoverflow.com/questions/358342/canonical-vs-non-canonical-terminal-input]
Posted by 구차니
Linux2009. 6. 19. 23:12
일반적으로 많이 사용하는 리다이렉션은

>  - 파일에 저장(새로파일 생성)
<  - 파일에서 불러옴
|  - 파이프라인, 결과를 이어줌
>> - 파일에 저장(기존파일에 이어서 붙임)
이정도이고, 잘 사용되지는 않지만 유용한 것으로는

2>  - 에러만 파일에 저장
정도가 있다.
>는 stdout 만 리다이렉션해서 화면으로는 에러가 출력되고
2>는 stderr 만 리다이렉션해서 화면으로는 정상 메시지가 출력된다.

둘다 리다이렉션해서 파일로 저장하고 싶다면

2>&1
이렇게 하면 된다.
예를 들어 컴파일시 모든 메시지를 저장하고 싶다면
$ make install 1> err.log 2>&1
라고 하면 된다.

> word
    The standard output (file descriptor 1) is sent to the file word which is created if it does not already exist.

>> word

    The standard output is sent to file word. If the file exists then output is appended (by seeking to the end); otherwise the file is created.

< word

    The standard input (file descriptor 0) is taken from the file word.

<< word

    The standard input is taken from the lines of shell input that follow up to but not including a line consisting only of word. If word is quoted then no interpretation of the document occurs. If word is not quoted then parameter and command substitution occur and \ is used to quote the characters \ $ ` and the first character of word. In the latter case \newline is ignored (c.f. quoted strings).

>& digit

    The file descriptor digit is duplicated using the system call dup (2) and the result is used as the standard output.

<& digit

    The standard input is duplicated from file descriptor digit.

<&-

    The standard input is closed.

>&-

    The standard output is closed.

[링크 : http://www.partmaps.org/era/unix/shell.html]

<&Digit      Duplicates standard input from the file descriptor specified by the Digit parameter
>& Digit     Duplicates standard output in the file descriptor specified by the Digit parameter
<&-          Closes standard input
>&-          Closes standard output
<&p          Moves input from the co-process to standard input
>&p          Moves output to the co-process to standard output

[링크 : http://www.softpanorama.org/Scripting/Shellorama/input_and_output_redirection.shtml]

Posted by 구차니