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 구차니
Linux2009. 6. 19. 23:05
콘솔 메시지 막기

커널 부트 옵션에 quite 를 넣어주면, dmesg 쪽으로 나가는 것은 버퍼링 쌓이지만,
화면으로 출력이 되지 않아, 부팅시 약간의 속도 향상을 기대 할 수 있다고 한다.

[링크 : http://elinux.org/Disable_Console]




시리얼 포트로 콘솔 메시지 출력하기

/etc/inittab
/boot/grub/grub.conf
/boot/grub/menu.lst 파일을 수정해야 한다. 수정 부분이 많으므로 링크 참조

kernel /vmlinuz-2.6.9-42.0.10.ELsmp ro root=LABEL=/ console=tty0 console=ttyS1,19200n

[링크 : http://www.cyberciti.biz/faq/linux-serial-console-howto/]
Posted by 구차니
Linux2009. 6. 19. 20:47
커널소스를 분석해 보진 않아서 정확하게 어떻게 여는지는 모르겠지만,
아마 tty 특성상 canonical mode로 여는것으로 보인다.

/dev/console is a symbolic link to /dev/tty0, and the kernel regards /dev/tty0 as a synonym for the current VT. XFree86 1.3 changes the owner of /dev/tty0, but does not reset this after finishing. Thus, loadkeys or dumpkeys might fail because someone else owns /dev/tty0; in such a case you might run X first. Note that you cannot change keyboard mappings when not at the console

[링크 : http://www.faqs.org/docs/Linux-HOWTO/Keyboard-and-Console-HOWTO.html]

Posted by 구차니
Linux2009. 6. 19. 20:35
$ sudo apt-get install manpages-dev

한가지 신기한 건, 페도라에서는 open이 3p에 있었는데 우분투는 2에 있다.


[링크 : http://mcchae.egloos.com/6956190]
Posted by 구차니
Linux2009. 6. 19. 18:21
이런 기능이 있는지도 몰랐는데..

Ctrl-S는 일시정지
Ctrl-Q는 일시정지 풀기 란다.


[링크 : http://nomoreid.egloos.com/1079123]
Posted by 구차니
개소리 왈왈2009. 6. 19. 15:27

구글 통계에서 나온 방문자 시간대별 방문 통계인데
역시 한국인은 밥시간은 잘 지켜야지 착한 어린이다 ㅋㅋ

"밥은 먹고 다니냐?"

가 머리를 맴돈다 -ㅁ-!


사족 : 전형적인 숙제블로그는 아닌건가 -ㅁ-!
         숙제블로그라면 6시 이후에서 새벽 2시 까지가 피크일텐데!

'개소리 왈왈' 카테고리의 다른 글

도를 아십니까?  (2) 2009.06.24
구차니 패닉  (10) 2009.06.20
구글 애널리틱스 - 유입 경로  (0) 2009.06.19
네이년 검색 유입을 노려야 하나?  (0) 2009.06.19
오늘의 유머 - 개발자 이야기  (0) 2009.06.18
Posted by 구차니