그동안 네이트온에 접속을 안하다가 오늘 네이트온에 접속해서 이야기를 하려고 했는데…
이상하게 대화창에서의 한글 입력이 안되었다.
확인을 해보니 우분투 9.10 에 기본으로 설치되어있는 ibus 입력기가 QT 프로그램과는 충돌을 일으킨다는 것…
흠… 처음부터 문제가 많았던 ibus… 이참에 nabi나 예전에 쓰던 scim 으로 갈아탈까 보다…
그동안 네이트온에 접속을 안하다가 오늘 네이트온에 접속해서 이야기를 하려고 했는데…
이상하게 대화창에서의 한글 입력이 안되었다.
확인을 해보니 우분투 9.10 에 기본으로 설치되어있는 ibus 입력기가 QT 프로그램과는 충돌을 일으킨다는 것…
흠… 처음부터 문제가 많았던 ibus… 이참에 nabi나 예전에 쓰던 scim 으로 갈아탈까 보다…
ALOHA는 하와이 말로 ‘안녕하세요’라는 인사말이다. 알로하 네트워크는 무선 네트워크인데, 하와이 대학에서 하와이를 둘러싸는 각 섬들과 통신하기 위해 만든 네트워크다. 1970년대 초에 만들었다고 한다. 송신과 수신 주파수가 조금 다르고(전송은 407MHz, 수신은 413MHz) 9600bps의 속도로 패킷을 전송한다. 지금 9600bps는 느린 속도지만 그 당시에는 괸장한 사건이었다고 한다. 때문에 많은 연구소에서 관심을 가지고 ALOHA를 연구하였는데, 우리에겐 복사기로 유명한 제록스사의 Palo Alto 연구소에서 ALOHA 를 근간으로 하여 Ethernet을 개발하였다.
알로하 네트워크와 이더넷 네트워크의 공통점은 다수가 네트워크에 접근할 수 있는 네트워크, 즉 다중 엑세스 네트워크인데 만약 동시에 복수의 사용자 노드가 네트워크에 접근을 시작하면 일정한 지연(사실은 난수를 토대로 한 지연) 후에 다시 접근을 시도한다. 모든 노드들은 네트워크상에서 다른 사용자의 접근을 감지한다. 이것을 네트워크 용어로 청취(Listen)이라고 하는데 모든 노드는 곧 리스너(Listener)인 셈이다. 이 리스너는 최근까지도 이더넷을 근간으로 하는 여러 네트워크에서 사용하는 개념이다.
알로하의 업적은 ‘최초’라는 것인데 하나의 통신 채널만이 접근이 가능하다는 점에서 독점적이라고 할 수 있다. 하나의 채널이 통신중이면 다른 통신 채널은 임의의 시간동안 대기하여아 한다. 사실 알로하의 이러한 이론은 이더넷도 다를 바 없지만 이더넷은 알로하가 통신채널을 공유하는데 반해, 특정한 시간을 각 노드에 분할해서 접근을 허용하는 시분할 시스템이다.
알로하는 아주 사라진 것이 아니고, 지구 주위를 돌며 통신을 하는 인공위성의 네트워크에 적용된다고 한다. 알로하는 여러가지 버전이 존재하는데 크게 Slotted와 Pure의 두 가지 버전이 존재한다. Slotted라고 이름 붙인 이유는 각 노드간 통신의 기준을 시간이라는 슬롯으로 나누었기 때문이다. 우리의 컴퓨터 내부에도 슬롯이라는 것이 존재하는데, 각 슬롯에는 하나의 카드를 꽂을 수 있다. 일명 빠찡고라고 불리는 슬롯머신도 각 슬롯이 한번의 레버 조작으로 각 슬롯이 돌아간다.
그렇기 때문에 일정한 주기를 가지는 시간 단위의 제약이 생긴다. Slotted ALOHA는 최대 전송 속도가 36Kbps의 전송속도를 가진다. 이에 비해 Pure ALOHA는 시도 때도 없이 전송을 시작할 수 있다. ㄷ 프로토콜은 실제 효율이 비교적 낮기 때문에 전송속도의 효율을 높이기 위해서 ‘예약’이라는 방법을 사용한다. SPADE라는 통신위성에서 사용하는 프로토콜이 있는데, 예약을 위한 채널(128Kbps)이 있고, 음성전송용 양방향 채널이 397(64Kbps)가 있다. 또 예약 방법을 사용하는 R.ALOHA(Reservation ALOHA)라는 것이 있다.
이러한 알로하의 변형들이 최근에 폭발적인 슈요의 셀룰러 통신 네트워크의 근간이다. 셀룰러 통신은 이동통신의 방법이다. 각 지역을 셀(세포)로 나누어 인접 셀들 간에 주파수를 다르게 한다. 각 셀들이 모인 일정 지역(구간)에는 중계소를 두는데, 이 중계소를 기지국이라고 한다. 이 중계소들은 보통 산악지역에 위치하게 되는데, 이동통신 사업자는 산을 잘 타는 직원들을 채용하는 이유도 이 때문이다.
C에서는 시그널 발생시 해당 시그널을 처리하게끔 만들어주는 함수로 raise()가 있다.
쉘 프로그래밍에서도 이와 비슷한 기능을 하는 명령어가 있는데 ‘trap’이다.
trap을 이용하여 실행할 명령어와 처리하고자 하는 시그널을 지정해주면 된다. 만일 실행할 명령어를 지정하지 않고 처리할 시그널을 지정하면 해당 시그널은 무시하는 것으로 처리된다.
trap 명령어의 간단한 사용예를 보면 다음과 같다. 다음의 경우는 INT시그널(SIGINT와 동일)이 발생하면 명령1과 명령2가 자동으로 실행되도록 지정한 것이다.
trap “명령1; 명령2” INT
trap 명령을 수행하면서 지정할 수 있는 시그널의 종류를 확인하려면 shell 상에서 kill -l 명령을 실행하면 된다. 그러면 다음과 같이 쉘에서 처리할 수 있는 시그널의 종류가 화면에 디스플레이 된다.

프로세스 I/O
popen 은 command 를 shell을 가동시켜서 열고 pipe(2)로 연결한다.
pipe 는 기본적으로 단방향으로만 정의 되어 있음으로, 읽기전용 혹은
쓰기전용 으로만 열수 있으며, type 로 정의된다. popen 은
command 를 실행시키고 pip 연결을 위해서 내부적으로 fork() 와 pipe()
를 사용한다.
command 는 실행쉘인 /bin/sh 에 -c 옵션을 사용하여서 전달되게 된다.
pclose(2) 함수는 종료되는 관련 프로세스를 기다리며 wait(2) 가 반환하는
것처럼 명령어의 종료 상태를 반환한다.
popen 은 실패할경우 NULL 을 반환한다. pclose 는 종료되는
관련 프로세스를 기다리며 명령어의 종료 상태를 반환한다.
에러가 발견될경우 -1 을 리턴한다.
popen 함수는 메모리 할당이 실패한다면, errno 를 설정하지 않는다.
fork()나 pipe()에서 실패했을경우 적당한 errno 를 설정한다.
pclose()는 자식의 상태를 얻을수 없을경우 errno 를 ECHILD 로
설정한다.
#include <stdio.h>
#define MAXLINE 256
int main()
{
FILE *fp;
int state;
char buff[MAXLINE];
fp = popen("ls -al", "r");
if (fp == NULL)
{
perror("erro : ");
exit(0);
}
while(fgets(buff, MAXLINE, fp) != NULL)
{
printf("%s", buff);
}
state = pclose(fp);
printf("state is %dn", state);
}
출처 : joinc.co.kr
-------------------------------------------------------------------------------------------------
popen를 한쪽 방향이 아닌 "rw" 옵션을 사용해서 열기를 시도해서 30분동안 삽질하다가 겨우 발견한 해결방법..
사용자들은 단말기를 통해 시스템에게 전달하고자 하는 내용을 입력하고 원하는 정보를 출력 받는다. 이때 생각했던 것보다 많은 일들이 발생하는데 단말기에서 발생한 모든 일은 담당 커널이 처리를 한다.
이때 담당 커널은 소프트웨저거으로 구현된 장치 구동기를 의미하는데 장치 구동기는 단말기 장치와 프로그램 사이의 문자 전송이 주목적인 프로그램이다. 흔히 단말기라고 하면 표준 입출력 장치를 의미하는데 이는 키보드와 모니터를 의미한다. 유닉스 시스템은 이들 표준 입출력 장치도 특수 파일의 하나로 인식하여 처리를 하고 있다.
/dev 디렉토리 밑에 있는 특수 파일들에는 단말기를 위한 파일이 존재하는데, 예를 들면 다음과 같다.
/dev/tty01
/dev/tty02
쉘에서는 단말기의 특성을 변경하는 방법을 제공하고 있는데, 이때 사용하는 키워드는 stty이다.