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 구차니
개소리 왈왈2009. 6. 19. 10:21
구글 애널리틱스를 설치해서 3일째 분석중이다.
(이전글과는 너무 다른 모습일려나?)

아무튼 내 블로그는 거의 대부분의 검색유입이다.



1위는 구글 검색 유입
2위는 다음 검색 유입
3위는 직접 주소를 입력(혹은 즐겨찾기?) 해서 오는 유입


그나저나 방문시간이 짧다는 것과, 방문자별 페이지수가 적은건 좋게 받아 들여야 할지
나쁘게 받아 들여야 할지 참.. 애매하다.

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

구차니 패닉  (10) 2009.06.20
개발자도 밥 시간은 지켜야지!!!  (2) 2009.06.19
네이년 검색 유입을 노려야 하나?  (0) 2009.06.19
오늘의 유머 - 개발자 이야기  (0) 2009.06.18
예비군 훈련 공지  (2) 2009.06.18
Posted by 구차니
개소리 왈왈2009. 6. 19. 10:08
문득 Kay~ 님의 블로그에서 네이버 / 다음 검색 유입 키워드가 상반된다
이야기를 보고 내 검색유입을 보았더니.. 네이버는 전혀 없다 -ㅁ-!

그래서 순간 손이 움찔움찔 하면서 검색 요청을 해!!!
라는 말이 소근소근 들려 왔지만 등록하려는 순간 힘이 빠져 뒤로가기를 누르게 되었다.
네이버에서 안오면 어때~ (그렇다고 내가 극렬 네이버 안티는 아니지만, 나름 삼송 안티이긴한데 -ㅁ-)

그렇게 그냥 구글신님과 다음검색 유입으로 만족을 해야 하나 흐음..

그런데 원론적인 의문이 들었다.
"왜 많은 사람들이 오기를 바라는거지?"

난 블로그에 광고를 다는 것고 아니고, 유명해지고자 하는 블로그도 아닌데
어느 순간 부터 방문자에 너무 목을 매고 있었던 걸까? 라는 생각이 들었다.
물론 유명해지면 좋고, 많이 오면 혹시 떡고물이 떨어질수도 있고, 광고 욕심도 생겨 달면 달러 벌이도 할 수 있고
좋을수도 있긴 하지만, 글쎄?

기억의 외부 저장장소로 블로그를 사용하는데 굳이 많은 사람들이 찾을 이유가 있나?
원래 블로그 시작 목적은, 정말 주옥~ 같은 알찬 정보로 가득찬 조용한 블로그 아니었던가?





아무튼, 아래는 네이버에 검색등록 방법 FAQ 내용 / 다음의 검색등록 페이지

[링크 : http://help.naver.com/faq/exSelfRARAMain.jsp?reQuestion=%BA%ED%B7%CE%B1%D7+%B0%CB%BB%F6&query_gubn=url&question=%C6%BC%BD%BA%C5%E4%B8%AE+%B0%CB%BB%F6&sch_option=all]

[링크 : http://help.search.daum.net/help/register.html]



사족 : 그냥 조용히 살자~ ㅋㅋㅋ
Posted by 구차니
개소리 왈왈/자전거2009. 6. 19. 00:15

지도를 보면 이해가 바로바로 될 듯 -ㅁ-!
술도 안 먹었는데 왜 이런거지 -ㅁ-!

아무튼 한강공원쪽으로해서 가락시장쪽 출구 까지는 16km/42min 걸렸다. (계산상으로는 22.8km/h 이다.)
물론 지도상에서 재본거는 13.8km 3km 오차가 나는거 봐서는 속도계를 손을 봐야 할 듯 하다.
(지도상거리로 계산하면 19.7km/h)
원래 대로라면 26인치라서 원래 수치보다 적게 넣어서 겨우겨우 대충 맞췄다고 생각했는데, 더욱 줄여야 하나 고심중이다.


아무튼 도심을 뚫는건 길을 잘못 들은 탓이 크긴 하지만, 제대로 만 간다면 20분내에 도착이 가능하고,
시간상으로는 20분 단축이 되는 것이다. 그리고 나서 계속 달릴수만 있다면
1시간 내에 회사 까지 갈 수 있을 듯 하다.(총 20km)


결론 : 비싼 자전거 보다 비싼 다리를!!! 구차니군 다리는 100만불 짜리 다리~
Posted by 구차니
Linux API/network2009. 6. 18. 21:19
아래의 소스에서 눈여겨 볼 부분은 다음과 같다.
    struct ifreq *ifr;
    struct ifconf ifcfg;

    ioctl(fd, SIOCGIFCONF, (char *)&ifcfg);

    // 네트워크 장치의 정보를 얻어온다. 
    // 보통 루프백과 하나의 이더넷 카드를 가지고 있을 것이므로
    // 2개의 정보를 출력할 것이다.

    ifr = ifcfg.ifc_req;
    for (n = 0; n < ifcfg.ifc_len; n+= sizeof(struct ifreq))
    {
        // 주소값을 출력하고 루프백 주소인지 확인한다.
        printf("[%s]\n", ifr->ifr_name);
        sin = (struct sockaddr_in *)&ifr->ifr_addr;
        printf("IP    %s %d\n", inet_ntoa(sin->sin_addr), sin->sin_addr.s_addr);
        if ( ntohl(sin->sin_addr.s_addr) == INADDR_LOOPBACK)
        {
            printf("Loop Back\n");
        }
        else
        {
            // 루프백장치가 아니라면 MAC을 출력한다.
        }
        ifr++;
    }

ifr은 struct ifreq인데, 여러개가 있을 수 있으니, 저런식으로 포인터로 증가를 시켜준다. (ifr++)
그리고 n개의 네트워크 장치가 있을 수 있으니, ifcfg.ifc_len의 값으로 전체 갯수를 알려준다.
그 다음에는 장치명(익숙한 eth0 라던가)은 ifr->ifr_name에 들어있다.

#include "sys/ioctl.h"
#include "sys/types.h"
#include "sys/stat.h"
#include "sys/socket.h"
#include "unistd.h"
#include "netinet/in.h"
#include "arpa/inet.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "net/if.h"
#include "arpa/inet.h"

int main()
{
    // 이더넷 데이터 구조체 
    struct ifreq *ifr;
    struct sockaddr_in *sin;
    struct sockaddr *sa;

    // 이더넷 설정 구조체
    struct ifconf ifcfg;
    int fd;
    int n;
    int numreqs = 30;
    fd = socket(AF_INET, SOCK_DGRAM, 0);

    // 이더넷 설정정보를 가지고오기 위해서 
    // 설정 구조체를 초기화하고  
    // ifreq데이터는 ifc_buf에 저장되며, 
    // 네트워크 장치가 여러개 있을 수 있으므로 크기를 충분히 잡아주어야 한다.  
    // 보통은 루프백주소와 하나의 이더넷카드, 2개의 장치를 가진다.
    memset(&ifcfg, 0, sizeof(ifcfg));
    ifcfg.ifc_buf = NULL;
    ifcfg.ifc_len = sizeof(struct ifreq) * numreqs;
    ifcfg.ifc_buf = malloc(ifcfg.ifc_len);

    for(;;)
    {
        ifcfg.ifc_len = sizeof(struct ifreq) * numreqs;
        ifcfg.ifc_buf = realloc(ifcfg.ifc_buf, ifcfg.ifc_len);
        if (ioctl(fd, SIOCGIFCONF, (char *)&ifcfg) < 0)
        {
            perror("SIOCGIFCONF ");
            exit;
        }
        // 디버깅 메시지 ifcfg.ifc_len/sizeof(struct ifreq)로 네트워크 
        // 장치의 수를 계산할 수 있다.  
        // 물론 ioctl을 통해서도 구할 수 있는데 그건 각자 해보기 바란다.
        printf("%d : %d \n", ifcfg.ifc_len, sizeof(struct ifreq));
        break;
    }

    // 주소를 비교해 보자.. ifcfg.if_req는 ifcfg.ifc_buf를 가리키고 있음을 
    // 알 수 있다. 
    printf("address %d\n", &ifcfg.ifc_req);
    printf("address %d\n", &ifcfg.ifc_buf);

    // 네트워크 장치의 정보를 얻어온다.  
    // 보통 루프백과 하나의 이더넷 카드를 가지고 있을 것이므로 
    // 2개의 정보를 출력할 것이다. 
    ifr = ifcfg.ifc_req;
    for (n = 0; n < ifcfg.ifc_len; n+= sizeof(struct ifreq))
    {
        // 주소값을 출력하고 루프백 주소인지 확인한다.
        printf("[%s]\n", ifr->ifr_name);
        sin = (struct sockaddr_in *)&ifr->ifr_addr;
        printf("IP    %s %d\n", inet_ntoa(sin->sin_addr), sin->sin_addr.s_addr);
        if ( ntohl(sin->sin_addr.s_addr) == INADDR_LOOPBACK)
        {
            printf("Loop Back\n");
        }
        else
        {
            // 루프백장치가 아니라면 MAC을 출력한다.
            ioctl(fd, SIOCGIFHWADDR, (char *)ifr);
            sa = &ifr->ifr_hwaddr;
            printf("%s\n", ether_ntoa((struct ether_addr *)sa->sa_data));
        }
        // 브로드 캐스팅 주소 
        ioctl(fd,  SIOCGIFBRDADDR, (char *)ifr);
        sin = (struct sockaddr_in *)&ifr->ifr_broadaddr;
        printf("BROD  %s\n", inet_ntoa(sin->sin_addr));
        // 네트워크 마스팅 주소
        ioctl(fd, SIOCGIFNETMASK, (char *)ifr);
        sin = (struct sockaddr_in *)&ifr->ifr_addr;
        printf("MASK  %s\n", inet_ntoa(sin->sin_addr));
        // MTU값
        ioctl(fd, SIOCGIFMTU, (char *)ifr);
        printf("MTU   %d\n", ifr->ifr_mtu);
        printf("\n");
        ifr++;
    }
}

[링크 : http://www.joinc.co.kr/modules.php?file=article&mode=nested&name=News&sid=148]
Posted by 구차니
Linux2009. 6. 18. 21:15
Posted by 구차니