· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Docbook Sgml/Programming_tip-KLDP

You are not allowed to 'Keywords'


C¿Í python¿¡ °üÇÑ Â©¸·ÇÑ ¿¹Á¦

C¿Í python¿¡ °üÇÑ Â©¸·ÇÑ ¿¹Á¦

±è¿ëÀÏ

$Date: 2010/02/03 06:51:14 $

ÇÁ·Î±×·¥À» Çϸ鼭 Æ´Æ´ÀÌ ¿¹Á¦ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í, ´Ù¸¥ °÷¿¡ ÀÖ´Â ¿¹Á¦¸¦ ¸ð¾Æ ³õÀº °ÍÀÔ´Ï´Ù..

고친 과정
고침 0.12002-11-16고친이 ±è ¿ëÀÏ
ÃÖÃÊ ÀÛ¼º

1. ¼Ò°³

1.1. À̱ÛÀº

ÇÁ·Î±×·¥À» Çϸ鼭 Æ´Æ´ÀÌ ¿¹Á¦ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í, ´Ù¸¥ °÷¿¡ ÀÖ´Â ¿¹Á¦¸¦ ¸ð¾Æ ³õÀº °ÍÀÔ´Ï´Ù..

ÁÖ·Î C¿Í python¿¡ °ü·ÃµÈ ¹®¼­ ÀÔ´Ï´Ù.


1.2. µ¡±Û

ÇѱÛÀ» »ì¸®°í ³ª¶ó¸¦ »ì¸®´Â ±æÀº, °úÇÐÀûÀ¸·Î À¸¶ä°¡´Â ¼¼¹ú½ÄÀ» »ç¿ëÇÏ´Â °Í»ÓÀÔ´Ï´Ù.

´ëÇѹα¹ °úÇбâ¼úÀ» »ì¸®´Â±æÀº ½¬¿î Çѱ۷ΠµÈ ¹®¼­¸¦ ¸¸µå°ÍÀÔ´Ï´Ù. ¿Ü±¹¹®¼­¸¦ ÀÚ±â È¥ÀÚ¸¸ º¸°í ¸»°ÍÀÌ ¾Æ´Ï¶ó, ½±°Ô ¹ø¿ª, º¸ÃæÇؼ­ ÃÊÁß°í»ýµé·Î º¼¼ö ÀÖ°Ô ÇØ¾ß ÇÕ´Ï´Ù.

³ª¶ó¸¦ Àß »ì°í, ºÎ°­ÇÏ°Ô ÇØ¾ß ÇÏ´Â ÀÌÀ¯´Â ´Ù¸¥³ª¶ó³ª, ÀÎÁ¾¿¡°Ô ¼­·¯¿òÀ» ¹ÞÁö ¾Ê±â Çϱâ À§ÇÔÀÔ´Ï´Ù.


1.3. µµ¿Í ÁֽźÐ

°ü·Ã¼­Àû°ú ¿©·¯ ÀÎÅÍ³Ý »çÀÌÆ®¸¦ ¿î¿µÇÏ°í °è½Å ºÐµé²² °¨»çÇÕ´Ï´Ù.


1.4. ÀúÀÛ±Ç

ÀÌ ¹®¼­´Â GNU Free Documentation License ¹öÀü 1.1 ȤÀº ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î Àç´Ü¿¡¼­ ¹ßÇàÇÑ ÀÌÈÄ ÆÇÀÇ ±ÔÁ¤¿¡ µû¸£¸ç ÀúÀ۱ǿ¡ ´ëÇÑ º» »çÇ×ÀÌ ¸í½ÃµÇ´Â ÇÑ ¾î¶°ÇÑ Á¤º¸ ¸Åü¿¡ ÀÇÇÑ º»¹®ÀÇ ÀüÀ糪 ¹ßÃéµµ ¹«»óÀ¸·Î Çã¿ëµË´Ï´Ù.

º» ÀúÀÚ´Â ¹®¼­ÀÇ ³»¿ëÀÌ ¾ß±âÇÒ ¼ö ÀÖ´Â ¾î¶°ÇÑ °á°ú¿¡ ´ëÇؼ­µµ Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù.


2. C

2.1. ÄÄÆÄÀÏ Çϱâ(make »ç¿ëÇÔ)

hello.c ¼Ò½º

#include <stdio.h>

int main()
{
  printf ("This is test program");
  return 0;
}
    
hello.c ¼Ò½º

hello.c ÄÄÆÄÀÏÇϱâ

gcc -o hello hello.c

./hello

This is test program
    

¡Ø gcc ¿É¼Ç

c ¾ð¾î´Â ±âº»ÀûÀ¸·Î ÄÄÆÄÀÏÀ» ¸ÕÀú Çؼ­ object È­ÀÏÀ» ¸¸µé¾î ÁÝ´Ï´Ù.

±×¸®°í ³ª¼­ link¸¦ ÇØÁ־ ½ÇÇà È­ÀÏÀ» ¸¸µé¾î ÁÝ´Ï´Ù.

-o name : ½ÇÇà È­ÀÏ À̸§À» Á¤Çؼ­ ¸¸µé¾î ÁØ´Ù.

-c : ÄÄÆÄÀϸ¸ ÇÑ´Ù.

make »ç¿ëÇϱâ

# all ¸í·ÉÀ» ½ÇÇàÇÑ´Ù.
all:   excute 

# ¿ÀÇÁÁ§Æ® È­ÀÏÀ» ¸¸µç´Ù.
object:     hello.o

# ½ÇÇà È­ÀÏ ¸¸µç´Ù.
excute :        hello

# ¿ÀÇÁÁ§Æ® È­ÀÏÀ» Áö¿î´Ù.
clean:
            rm -f collage *.o
    

make ½ÇÇà

cc    -c hello.c -o hello.o
cc   hello.o   -o hello
    

À̶§ ¿ÀÇÁ Á§Æ® È­ÀÏÀÌ ¾ø¾î¾ß ÇÑ´Ù.(*.o)

hello ½ÇÇà

This is test program
    


2.2. make »ç¿ëÇÒ¼ö ÀÖµµ·Ï ¸¸µé±â

autoscan

mv configure.scan configure.in

configure.in ¼öÁ¤

dnl Process this file with autoconf to produce a configure script.
AC_INIT()

AC_CONFIG_HEADER(config.h)

dnl Checks for programs.

.....
.....
.....

AC_OUTPUT( Makefile )
    

aclocal

autoheader

autoconf

automake (--add-missing)

./configure


2.3. ¸ðµâ(¶óÀ̺귯¸®) ±âÃÊ

  1. Á¤Àû ¶óÀ̺귯¸®

    .a

  2. °øÀ¯ ¶óÀ̺귯¸®

    .so, .sa

  3. Á¤Àû ¶óÀ̺귯ÀÇ ´ÜÁ¡Àº µ¿½Ã¿¡ ¿©·¯ ÇÁ·Î±×·¥À» ¶ç¿üÀ» °æ¿ì À̵éÀÌ ¸ðµÎ °°Àº ¶óÀ̺귯¸®ÀÇ ÇÔ¼öµéÀ» »ç¿ëÇÔÀ¸·Î½á ¸Þ¸ð¸®¿¡ °°Àº ÇÔ¼öµéÀ» ¿©·¯ ¹ø º¹»çÇÏ°í, ÇÁ·Î±×·¥ ÆÄÀÏ¿¡µµ °°Àº ¶óÀ̺귯¸®¸¦ ¿©·¯ ¹ø º¹»ç¸¦ ÇÑ´Ù´Â °ÍÀÌ´Ù.

    ÀÌ´Â ¸Þ¸ð¸® ¿ë·®°ú µð½ºÅ© ¿ë·®À» ¸¹ÀÌ ¼Ò¸ðÇÑ´Ù. ¸¹Àº À¯´Ð½º ½Ã½ºÅÛ¿¡¼­´Â ÀÌ·¯ÇÑ ºÒÆíÇÔÀ» ±Øº¹ÇÒ ¼ö ÀÖµµ·Ï °øÀ¯ ¶óÀ̺귯¸®¸¦ Á¦°øÇÑ´Ù.

  4. python °øÀ¯ ¸ðµâ ¸¸µé±â

    #!/bin/bash
    
    echo $1
    
    if [ $# = 0 ] ;then
        echo "»ç¿ë¹ý : È®ÀåÀÚ(.c)¸¦ »« ¼Ò½º À̸§À» ÀÔ·ÂÇϼ¼¿ä."
        exit 0
    fi
    swig -python -module $1 $1.c
    gcc -c $1.c $1_wrap.c -I/usr/include/python1.5 -I/usr/lib/python1.5/config
    ld -shared $1.o $1_wrap.o -o $1module.so
            


2.4. talk_server

´ëÈ­¹æ ¼­¹ö ÀÔ´Ï´Ù.

ÄÄÆÄÀÏ : gcc -o talker_server talk_server.c

½ÇÇà : talk_server 3000

¼Ò½º

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define MAXLINE 512

char * escapechar = "exit";

int main(int argc, char * argv[]) 
{
int server_fd, client_fd;
int clilen, num;

char sendline[MAXLINE], recvline[MAXLINE];

int size;
pid_t pid;
struct sockaddr_in client_addr, server_addr;

  if(argc != 2) 
  {
    printf("»ç¿ë¹ý : %s port  ", argv[0]);
    exit(0);
  }

  if((server_fd = socket(PF_INET, SOCK_STREAM, 0)) < 0) 
  {
    printf("Server : Can't open stream socket ");
    exit(0);
  }

  bzero((char *) & server_addr, sizeof(server_addr));

  server_addr.sin_family = AF_INET;
  server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  server_addr.sin_port = htons(atoi(argv[1]));

  if(bind(server_fd, (struct sockaddr *) & server_addr, sizeof(server_addr)) < 0) 
  {
    printf("Server : Can't bind local address");
    exit(0);
  }

  printf("Server started. Waiting for client.. ");
  listen(server_fd, 1);

  clilen = sizeof(client_addr);
  if((client_fd = accept(server_fd, (struct sockaddr *) & client_addr, &clilen)) < 0) 
  {
    printf("Server : failed in accepting.");
    exit(0);
  }

  if(( pid = fork()) > 0) 
  {
    while(fgets(sendline, MAXLINE, stdin ) != NULL) 
    {
      size = strlen(sendline);
      if(write(client_fd, sendline, strlen(sendline)) != size) printf("Error in write ");
      if(strstr(sendline, escapechar) != NULL) 
      {
        printf("Good bye.");
        close(client_fd);
        exit(0);
      }
    }
  } else if (pid == 0) 
  {
  while(1) 
  {
    if((size = read(client_fd, recvline, MAXLINE)) < 0) 
    {
      printf("Error if read ");
      close(client_fd);
      exit(0);
    }

    recvline[size] = '';
    if(strstr(recvline, escapechar) != NULL) break;

    printf("%s", recvline);
    }
  }

  close(server_fd);
  close(client_fd);

  return 0;
}
    


2.5. talk_client

´ëÈ­¹æ Ŭ¶óÀ̾ðÆ® ÀÔ´Ï´Ù.

ÄÄÆÄÀÏ : gcc -o talk_client talk_client.c

½ÇÇà : talk_client SERVERIP 3000

¼Ò½º

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define MAXLINE 1024

char *escapechar = "exit";

int main(int argc, char *argv[]) 
{
  char line[MAXLINE], sendline[MAXLINE], recvline[MAXLINE+1];

  int n, size, comp;

  pid_t pid;

  static int s;

  static struct sockaddr_in server_addr;

  if(argc != 3) 
  {
    printf("»ç¿ë¹ý : %s server_IP port ", argv[0]);
    exit(0);
  }

  if((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) 
  {
    printf("Client: Can't open stream socket. ");
    exit(0);
  }

  bzero((char *) & server_addr, sizeof(server_addr));

  server_addr.sin_family = AF_INET;
  server_addr.sin_addr.s_addr = inet_addr(argv[1]);
  server_addr.sin_port = htons(atoi(argv[2]));

  if(connect(s, (struct sockaddr *) & server_addr, sizeof(server_addr)) < 0) 
  {
    printf("Client: can't connect to server. ");
    exit(0);
  }

  if(( pid = fork()) > 0) 
  {
    while(fgets(sendline, MAXLINE, stdin) != NULL) 
    {
      size = strlen(sendline);
      if(write(s, sendline, strlen(sendline)) != size) printf("Error in write ");

      if(strstr(sendline, escapechar) != NULL) 
      {
        printf("Good bye. ");
        close(s);

        exit(0);
      }
    }
  } else if(pid == 0) 
  {
    while(1) 
    {
      if((size = read(s, recvline, MAXLINE)) < 0) 
      {
        printf("Error if read ");
        close(s);
      }
      recvline[size] = '';
      if(strstr(recvline, escapechar) != NULL) break;

      printf("%s", recvline);
    }
  }
  close(s);

  return 0;
}
    


2.6. ÀÎÀÚ Ã³¸® ÇÔ¼ö

ÇÁ·Î±×·¥ ½ÇÇÛÇÒ¶§ÀÇ ÀÎÀÚ Ã³¸® ¹æ¹ýÀÔ´Ï´Ù.

#include <stdio.h>

char *programname; // usage()

char a;
char *b = "";
unsigned int d = 1;

void usage ();

int main(int argc, char **argv)
{
char option;
extern char *optarg;
programname = argv[0]; // ÇÁ·Î±×·¥ À̸§À» º¯¼ö¿¡ ³Ö´Â´Ù.

  if (argc < 2) usage (); // ÀÎÀÚ°¡ ¾øÀ¸¸é usage() ÇÔ¼ö È£Ãâ

  while ((option = getopt (argc, argv, "a:b")) != -1) 
  { // ÀÎÀÚ Ã³¸® ÇÔ¼ö 
    switch (option) 
    {
      case 'a':
        a = 1;
        break;
      case 'b':
        b = optarg;
        break;
      default:
        usage ();
    }
  }

  printf("a : %d , b : %s", a, b);

  return 0;
}

void usage ()
{
    printf ("»ç¿ë¹ý : %s [-a ÀÎÀÚ] [-b ÀÎÀÚ] [-c ÀÎÀÚ] [-d ÀÎÀÚ]", programname);
    exit (1);
}
    


2.7. daytime.c ¼Ò½ºÀÔ´Ï´Ù.

daytime.c ¼Ò½ºÀÔ´Ï´Ù.

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define BUF_LEN 128

int main(int argc, char *argv[]) 
{
int sockfd, n;

char *haddr;
struct sockaddr_in server_addr; /* ¼­¹ö ÁÖ¼Ò¸¦ ³ÖÀ» ±¸Á¶Ã¼ */
char buf[BUF_LEN + 1];

  if(argc != 2) 
  {
    printf("»ç¿ë¹ý : %s ip_address", argv[0]);
    exit(0);
  }

  haddr = argv[1];

  if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) 
  {
    printf("¼ÒÄÏÀ» ¸¸µé¼ö ¾ø½À´Ï´Ù.");
    exit(0);
  }

  bzero((char *) &server_addr, sizeof(server_addr)); /* ÃʱâÈ­¸¦ ÇØÁØ´Ù. */

  server_addr.sin_family = AF_INET;
  server_addr.sin_port = htons(13); /* daytime ¼­¹ö Æ÷Æ®¸¦ ¼³Á¤ÇÑ´Ù. */
  server_addr.sin_addr.s_addr = inet_addr(argv[1]);

  if(connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) 
  {
    printf("¼­¹ö Æ÷Æ®¿¡ Á¢¼ÓÀ» ÇÒ¼ö ¾ø½À´Ï´Ù.");
    exit(0);
  }

  while((n = read(sockfd, buf, BUF_LEN)) > 0) 
  {
    buf[n] = '';
    if(fputs(buf, stdout ) == EOF) printf("aaaa");
  }

  close(sockfd);

  return 0;
}
    


2.8. ½Ã±×³Î ÇÔ¼ö

ÄÜÆ®·Ñ Å°ÀÇ Á¶ÇÕ ÇÒ¶§ »ç¿ëÇÏ´Â ÇÔ¼ö ÀÔ´Ï´Ù.

½Ã±×³Î ÇÔ¼ö : /usr/include/bits/signum.h

ÄÄÆÄÀÏ : gcc -o signal_test signal_test.c

½ÇÇà : ./signal_test

¼Ò½º

#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>

int my_signal(void); // »õ·Î¿î ½Ã±×³Î ÇÔ¼ö¸¦ ¼±¾ðÇÑ´Ù.
int count = 0;  // ctrl-c ÀԷ Ƚ¼ö Ä«¿îÅÍ

int main()
{
  int i = 0;

  if(signal(SIGINT, my_signal) == SIG_ERR) 
  { // ½Ã±×³Î ÇÔ¼ö¸¦ ÀÛµ¿ ½ÃŲ´Ù.
    printf("singal() error");
    exit(0);
  }

  while(count < 3) 
  { // contrl-c ÀÔ·ÂÀÌ 3¹ø±îÁö 
    sleep(1); // 1ÃÊ°¡ Á¤Áö
    printf("%d", i++); //  ctrl-c Ä«¿îÅÍ
  }

  return 0;
}

int my_signal(void)
{
  printf("Ctrl-C pressed. ");
  count++;
  return 0;
}
    


2.9. È£½ºÆ® À̸§ ¾Ë¾Æ³»´Â ÇÁ·Î±×·¥

ÄÄÆÄÀÏ : gcc -o test test.c

¼Ò½º1

#include <stdio.h>
#include <fcntl.h>

int main()
{
    char hostname[124];
    FILE *fd;
    fd = fopen("/proc/sys/kernel/hostname", "r");

    fread(hostname, sizeof(hostname), 1, fd);
    printf("%s", hostname);

    return 0;
}
    

¼Ò½º2

#include <unistd.h>
#include <netdb.h>

int main ()
{
  struct hostent* hoststruct;
  char hostname[255];

  gethostname(hostname, 100);
  hoststruct = gethostbyname(hostname);
  printf("È£½ºÆ® À̸§Àº %s ÀÔ´Ï´Ù.\n", hoststruct->h_name);

  return 0;
}
    


2.10. ´Ù±¹¾î Å×½ºÆ® ÇÁ·Î±×·¥(gettext)

  1. hello.po¸¦ ¸¸µé¾î ÁØ´Ù.

    xgettext -a -d hello -k_ -s hello.c

  2. mo È­ÀÏÀ» ¸¸µé¾î ÁÖ´Â »ç¿ë¹ýÀÔ´Ï´Ù.

    msgfmt hello.po

    messages ¶ó´Â È­ÀÏÀÌ »ý±â´Âµ¥ ÀÌ°ÍÀ» À̸§À» ¹Ù²Ù¾î ÁÖ¸é µË´Ï´Ù.

    mv hello.po hello.mo

  3. ·ÎÄÉÀÏ µð·ºÅ丮¿¡ Ä«ÇǸ¦ ÇÕ´Ï´Ù.

    cp hello.mo /usr/share/locale/ko/LC_MESSAGES/hello.mo

  4. ¼Ò½º¸¦ ÄÄÆÄÀÏ ÇÕ´Ï´Ù.

    gcc -o hello hello.c

  5. ¼Ò½º

    #include <locale.h>
    #include <stdio.h>
    #include <libintl.h>
    #define _(String) gettext (String)
    
    int main(void)
    {
        setlocale (LC_ALL, "");
        bindtextdomain ("hello", "/usr/share/locale/");
        textdomain ("hello");
    
        puts (_("hello"));
    
        return 0;
    }
           

  6. hello.po

    #: hello.c:24
    #, fuzzy
    msgid ""
    msgstr ""
    "Project-Id-Version: 1.0\n"
    "POT-Creation-Date: 2001-03-08 17:06+0900\n"
    "PO-Revision-Date: 2001-03-08 17:06+0900\n"
    "Last-Translator: Kim Yong Il <nalabi@formail.org>\n"
    "Language-Team: Uniwork Project Team <nalabi@formail.org>\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=ecu-kr\n"
    "Content-Transfer-Encoding: 8-bit\n"
    
    #: hello.c:25 hello.c:26 hello.c:28
    msgid "hello"
    msgstr "¾È³çÇϼ¼¿ä
            

  7. Makefile

    # Makefile for locale directory
    
    CWD = locale
    MSGFMT = msgfmt
    SUB_DIRS =
    FILES_PO:=$(wildcard *.po)
    FILES_MO:=$(FILES_PO:.po=.mo)
    
    LOCALEDIR ?= /usr/share/locale
    
    ifeq ($(enable_nls),1)
    all: mo-files
    
    mo-files: $(FILES_MO)
    
    install:
        $(MAKE) all
        for f in *.mo ; do mkdir -p \
            $(INSTALL_PREFIX)$(LOCALEDIR)/`basename $$f .mo`/LC_MESSAGES ; \
            cp $$f $(INSTALL_PREFIX)$(LOCALEDIR)/`basename $$f .mo`/LC_MESSAGES/gkrellm.mo ; done
    
    %.mo: %.po
        $(MSGFMT) -f -v -o $@ $<
    
    else
    
    all:
    
    install:
    
    endif
    
    clean:
        $(RM) $(FILES_MO)
            


2.11. define ¿¹Á¦

  1. ¼Ò½º

    #include "stdio.h"
    
    #define TEST(test)      my_func_##test()
    #define test(num)       __asm__ __volatile__("call test_" #num::);
    
    void my_func_hello(void)
    {
      printf("HELLO !!\n");
    }
    
    
    void my_func_goodbye(void)
    {
      printf("Good Bye !!\n");
    }
    
    
    void test_1(void)
    {
      printf("This is test_1 function\n");
    }
    
    
    void test_2(void)
    {
      printf("This is test_2 function\n");
    }
    
    
    int main()
    {
      int i;
      TEST(hello);
      TEST(goodbye);
    
      test(1);
      test(2);
    
      return 0;
    }
            

  2. ÄÄÆÄÀÏ

    gcc -o t test.c

  3. ½ÇÇà

    HELLO !!
    Good Bye !!
    This is test_1 function
    This is test_2 function
          


2.12. ã±â¸¦ ¿øÇÏ´ÂÈ­ÀÏ

¼Ò½º

#include 

int ftw_find();

int main(int argc, char *argv[])
{
  if (argc > 1)
  {
    ftw(argv[1],ftw_find, 0);
  }
  else
  {
    printf("Usage: %s dir\n", argv[0]);
  }
  return 0;
}

int ftw_find(const char *path, struct stat *sb, int flag)
{
  if(strstr(path,"ã°íÀÚ ÇÏ´Â ÆÄÀÏÀ̳ª µð·ºÅ丮")!=NULL)
  {
    printf("%s:\t%u\t\n", path, sb->st_size);
    exit(0);
  }
  return 0;
}
    


2.13. Ä¿³Î ½Ã½ºÅÛ ÄÝ ÇÔ¼ö

unistd.h Çì´õ

/usr/src/linux-2.4.18# vi include/asm/unistd.h

#define __NR_lremovexattr   236
#define __NR_fremovexattr   237
#define __NR_mycall         238
    

entry.S

/usr/src/linux-2.4.18# vi arch/i386/kernel/entry.S

    .long SYMBOL_NAME(sys_ni_syscall)   /* reserved for lremovexattr */
    .long SYMBOL_NAME(sys_ni_syscall)   /* reserved for fremovexattr */
    .long SYMBOL_NAME(sys_mycall) 		/* 238 mycall */
    

mycall.c

/usr/src/linux-2.4.18# vi kernel/mycall.c

#include <linux/kernel.h>
#include <linux/errno.h>

asmlinkage void sys_mycall()
{       
    printk("Corea Manse!!!!\n");
} 
    

krernel/Makefile

/usr/src/linux-2.4.18# vi kernel/Makefile

obj-y     = sched.o dma.o fork.o exec_domain.o panic.o printk.o \
        module.o exit.o itimer.o info.o time.o softirq.o resource.o \
        sysctl.o acct.o capability.o ptrace.o timer.o user.o \
        signal.o sys.o kmod.o context.o mycall.o
    

user Makefile

COMPILE=gcc

INCLUDEDIR = /usr/src/linux-2.4.18/include

MODCFLAGS := -I$(INCLUDEDIR)

mycall_app : mycall_app.c

    $(COMPILE) $(MODCFLAGS) -o $@ $^
    

¼Ò½º (mycall_app.c)

#include <linux/unistd.h>

/* system call stub function */
_syscall0(void, mycall);

main()
{
  mycall();
}
    


2.14. ¸Æ¾îµå·¹½º ¾Ë¾Æ³»±â

¼Ò½º

#include <netinet/ether.h>
#include <net/ethernet.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <stdio.h>

int main (int argc, char *argv[])
{
  struct ifreq *iflist;
  struct sockaddr *sa;
  int fd;
  char *out;

  if(argc != 2) 
  {
    printf("Usage: progname ifname (ex: progname eth0)\n");
    return -1;
  }
 
  iflist = malloc (sizeof (struct ifreq));

  fd = socket (PF_INET, SOCK_STREAM, 0);

  strncpy (iflist->ifr_name, argv[1], strlen (argv[1]));

  if (ioctl (fd, SIOCGIFHWADDR, iflist) == -1)
  {
    perror ("ioctl failed");
    return -1;
  }

  sa = &(iflist->ifr_hwaddr);

  out = ether_ntoa ((struct ether_addr *) sa->sa_data);

  printf ("%s\n", out);

  return 0;
}
    


3. C++

3.1. Ŭ·¡½º¸¦ ÀÌ¿ëÇؼ­ È£½ºÆ® À̸§ Ãâ·Â

g++ À» ÀÌ¿ëÇؼ­ È£½ºÆ® À̸§À» Ãâ·ÂÇÏ´Â Å×½ºÆ® ÇÁ·Î±×·¥ÀÔ´Ï´Ù.

ÄÄÆÄÀÏ : g++ -o test test.cpp

¼Ò½º

#include <unistd.h>
#include <string>

// Ŭ·¡½º¸¦ ¼±¾ðÇϳª.
class Init
{
private:
public:
  static string get_hostname();
};

// get_hostname À̶ó´Â ÇÔ¼ö¸¦ ¸¸µé¾î ÁØ´Ù.
string Init::get_hostname()
{
  char buf[128]; // È£½ºÆ® À̸§ÀÌ µé¾î°¥ º¯¼ö¸¦ ¼±¾ð
  string ret; 

  // È£½ºÆ® À̸§À» ¾ò´Â ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
  if((gethostname ( buf, sizeof(buf) )) < 0) 
  {
    ret.assign("Unkown Hostname"); // È£½ºÆ® À̸§ÀÌ ¾øÀ» °æ¿ì
  } else 
  {
    ret.assign(buf); // È£½ºÆ® À̸§À» ¾ò¾úÀ» °æ¿ì
  }

  return ret;  // °á°ú °ªÀ» ¸®ÅÏÇÑ´Ù.
}

int main(void) 
{

  cout << Init::get_hostname() << endl; // È­¸é¿¡ Ãâ·ÂÇÑ´Ù.

  return 0;
}
    


3.2. °´Ã¼ ¸¸µé¾î¼­ Ãâ·ÂÇϱâ

¼Ò½º

#include <string>

// Hello °´Ã¼¸¦ ¸¸µç´Ù.
class Hello 
{
  private:
  public:
    // ÇÔ¼ö¸¦ Çϳª ¸¸µç´Ù.
    void displayData() 
    {
      cout << "I am class" << endl; // Ãâ·ÂÀ» ÇÑ´Ù.
    }
};

int main(void)
{
  Hello hello; //hello °´Ã¼¸¦ ¼±¾ðÇÑ´Ù.

  hello.displayData(); //Ãâ·ÂÇÑ´Ù.

  return 0;
}
    

°á°ú

I am class
    


4. gtk

4.1. Çùֿ¡¼­ ŸÀÌƲ¹Ù ¾ø¾Ö´Â ¹æ¹ý

¼Ò½º

#include <gtk/gtk.h>

int main( int   argc, char *argv[] )
{
    GtkWidget *window;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_set_usize(window, gdk_screen_width(), gdk_screen_height());
    gtk_widget_set_uposition(window, 0, 0);

    gtk_widget_realize(window);
    gdk_window_set_decorations(window->window, 0);

    gtk_widget_show  (window);

    gtk_main ();

    return 0;
}
    

ÄÄÆÄÀÏ : gcc test.c -o test `gtk-config --cflags --libs`


4.2. ¹öÆ°¿¡ »ö»ó ³Ö±â

¸®¼Ò½º È­ÀÏ ÀÛ¼ºÇÑ´Ù. (testrc)

style "button"
{
    fg[PRELIGHT] = { 1.0, 1.0, 1.0 }  # ±ÛÀÚ»ö ¸¶¿ì½º¸¦ ¿Ã·Á ³õ¾ÒÀ»¶§
    bg[PRELIGHT] = { 0, 0.5, 0.5 }    # ¹è°æ»ö ¸¶¿ì½º¸¦ ¿Ã·Á ³õ¾ÒÀ»¶§

    fg[ACTIVE] = { 0, 0.0, 0.0 }          # ±ÛÀÚ»ö Ŭ¸¯ÇßÀ» °æ¿ì
    bg[ACTIVE] = { 0, 0.6, 0.6 }          # ¹è°æ»ö Ŭ¸¯ÇßÀ» °æ¿ì

    fg[NORMAL] = { 0.0, 0.0, 0.0 }    # ±ÛÀÚ»ö Æò»ó½Ã »ö»ó
    bg[NORMAL] = { 0.0, 0.5, 0.5 }    # ¹è°æ»ö Æò»ó½Ã »ö»ó

    fg[INSENSITIVE] = { 1.0, 0, 1.0 }
    bg[INSENSITIVE] = { 1.0, 1.0, 1.0 }
}

widget "*Button*" style "button"
    

¼Ò½º

#include <gtk/gtk.h>

int main (int argc, char *argv[])
{
  GtkWidget *window;
  GtkWidget *button;

  gtk_rc_parse( "testrc" );
  gtk_set_locale();

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  button = gtk_button_new_with_label ("¹öÆ°");
  gtk_widget_show (button);

  gtk_container_add (GTK_CONTAINER (window), button);

  gtk_widget_show (window);

  gtk_main ();
  return 0;
}
    

ÄÄÆÄÀÏ : gcc main.c -o main `gtk-config --cflags --libs`


5. python

5.1. print ¸í·É¾î

  1. ¼Ò½º

    def mesg(): 
            a = 1
            return a
    
    print mesg()
            

    °á°ú

    1 
            

  2. ¼Ò½º

    a = 10
    b = 10
    def mesg(a, b):
            c = a + b
            return c
    
    print mesg(a, b)
           

    °á°ú

    20
           

  3. ¼Ò½º

    a = 10
    b = 10
    def mesg(a, b):
            c = a + b
            return c
    
    if __name__ == '__main__':
            print mesg(a, b)
           

    °á°ú

    20
           


5.2. python °´Ã¼ °øºÎÇϱâ1

  1. ¼Ò½º

    #!/usr/bin/env python
    
    from gtk import *
    
    # FirstClass ¶ó´Â °´Ã¼¸¦ ¸¸µì´Ï´Ù.
    class FirstClass:
        def setdata(self, value):  # ¾î¶² °ªÀ» ¹Þ´Â setdata ÇÔ¼ö¸¦ ¸¸µì´Ï´Ù.
            self.data = value
        def display(self):         # setdata ¿¡¼­ ¹ÞÀº °ªÀ» Ãâ·ÂÇÕ´Ï´Ù.
            print self.data
    
    x = FirstClass()
    y = FirstClass()
    
    x.setdata("Kim Yong-Il")
    x.display()
    
    y.setdata("3.14159")
    y.display()
    
    print "¿À°Ô ¹Ù¸®"
            

  2. °á°ú

    python hello1.py

    Kim Yong-Il
    3.14159
    ¿À°Ô ¹Ù¸®
            


5.3. python °´Ã¼ °øºÎÇϱâ2

  1. ¼Ò½º

    #!/usr/bin/env python
    
    from gtk import *
    
    # FirstClass ¶ó´Â °´Ã¼¸¦ ¸¸µì´Ï´Ù.
    class FirstClass:
        def setdata(self, value):  # ¾î¶² °ªÀ» ¹Þ´Â setdata ÇÔ¼ö¸¦ ¸¸µì´Ï´Ù.
            self.data = value
        def display(self):         # setdata ¿¡¼­ ¹ÞÀº °ªÀ» Ãâ·ÂÇÕ´Ï´Ù.
            print self.data
    
    # SecondClass ¶ó´Â °´Ã¼¸¦ ¸¸µì´Ï´Ù.
    # SecondClass ¶ó´Â °´Ã¼´Â FirstClass °´Ã¼¸¦ Æ÷ÇÔÇÕ´Ï´Ù.
    class SecondClass(FirstClass):
        def display(self):         # È­¸é Ãâ·Â ÇÔ¼ö¸¦ ¸¸µì´Ï´Ù.
            print 'Current value = "%s"' % self.data
    
    z = SecondClass()
    z.setdata(42)
    z.display()
    
    print "¿À°Ô ¹Ù¸®"
            

  2. °á°ú

    python hello2.py

    Current value = "42"
    ¿À°Ô ¹Ù¸®
            


5.1. python °´Ã¼ °øºÎÇϱâ3

  1. ¼Ò½º

    #!/usr/bin/env python
    
    from gtk import *
    
    # FirstClass ¶ó´Â °´Ã¼¸¦ ¸¸µì´Ï´Ù.
    class FirstClass:
        def setdata(self, value):  # ¾î¶² °ªÀ» ¹Þ´Â setdata ÇÔ¼ö¸¦ ¸¸µì´Ï´Ù.
            self.data = value
        def display(self):         # setdata ¿¡¼­ ¹ÞÀº °ªÀ» Ãâ·ÂÇÕ´Ï´Ù.
            print self.data
    
    # SecondClass ¶ó´Â °´Ã¼¸¦ ¸¸µì´Ï´Ù.
    # SecondClass ¶ó´Â °´Ã¼´Â FirstClass °´Ã¼¸¦ Æ÷ÇÔÇÕ´Ï´Ù.
    class SecondClass(FirstClass):
        def display(self):         # È­¸é Ãâ·Â ÇÔ¼ö¸¦ ¸¸µì´Ï´Ù.
            print 'Current value = "%s"' % self.data
    
    # ThirdClass(SecondClass):
    # Third ¶ó´Â °´Ã¼´Â Second °´Ã¼¸¦ Æ÷ÇÔÇÕ´Ï´Ù.
    class ThirdClass(SecondClass):
        def __init__(self, value):
            self.data = value
        def __add__(self, other):
            return ThirdClass(self.data + other)
    
    a = ThirdClass("abc")
    a.display()
    
    b = a + 'xyz'
    b.display()
    
    
    print "¿À°Ô ¹Ù¸®"
            

  2. °á°ú

    python hello3.py

     
    Current value = "abc"
    Current value = "abcxyz"
    ¿À°Ô ¹Ù¸®
            


5.1. python °´Ã¼ °øºÎÇϱâ4

  1. ¼Ò½º

    #!/usr/bin/env python
    
    from gtk import *
    
    class Subclass:
        data = 'spam'
        def __init__(self, value):
            self.data = value
        def display(self):
            print self.data, Subclass.data
    
    x = Subclass(1)
    y = Subclass(2)
    
    x.display()
    y.display()
    
    print "¿À°Ô ¹Ù¸®"
            

  2. °á°ú

    python hello4.py

    1 spam
    2 spam
    ¿À°Ô ¹Ù¸®
            


5.1. python °´Ã¼ °øºÎÇϱâ5

  1. ¼Ò½º

    #!/usr/bin/env python
    
    from gtk import *
    
    class Super:
        def method(self):
            print 'in Super.method'
    
    class Sub(Super):
        def method(self):
            print 'starting Sub.method'
            Super.method(self)
            print 'ending Sub.method'
    
    x = Super()
    x.method()
    
    print "------------------>"
    
    x = Sub()
    x.method()
            

  2. °á°ú

    python hello5.py

    in Super.method
    ------------------>
    starting Sub.method
    in Super.method
    ending Sub.method
            


5.1. python °´Ã¼ °øºÎÇϱâ6

  1. ¼Ò½º

    #!/usr/bin/env python
    
    from gtk import *
    
    class Super:
        def method(self):
            print 'in Super.method'
        def delegate(self):
            self.action()
    
    class Inheritor(Super):
        pass
    
    class Replacer(Super):
        def method(self):
            print 'in Replacer.method'
    
    class Extender(Super):
        def method(self):
            print 'starting Extender.method'
            Super.method(self)
            print 'ending Extender.method'
    
    class Provider(Super):
        def action(self):
            print 'in Provider.action'
    
    if __name__ == '__main__':
        for klass in (Inheritor, Replacer, Extender):
            print '
    ' + klass.__name__ + '...'
            klass().method()
        print '
    Provider...'
        Provider().delegate()
            

  2. °á°ú

    python hello6.py

    ending Extender.method
    
    Inheritor...
    in Super.method
    
    Replacer...
    in Replacer.method
    
    Extender...
    starting Extender.method
    in Super.method
    
    Provider...
            


5.1. python °´Ã¼°øºÎÇϱâ 7

  1. ¼Ò½º

    #!/usr/bin/env python
    
    from gtk import *
    
    class Number:
        def __init__(self, start):
            self.data = start
        def __sub__(self, other):
            return Number(self.data - other)
    
    x = Number(5)
    y = x -2
    y.data
    
    print y.data
            

  2. °á°ú

    python hello7.py

    3
            


5.1. python °´Ã¼ °øºÎÇϱâ8

  1. ¼Ò½º

    #!/usr/bin/env python
    
    from gtk import *
    
    class indexer:
        def __getitem__(self, index):
            return index ** 2
    
    x = indexer()
    for i in range(5):
        print x[i],
            

  2. °á°ú

    python hello8.py

     
    0 1 4 9 16
            


5.1. smtp.py ¸ÞÀÏ¹ß¼Û ÇÁ·Î±×·¥

ÃÖÈñö ¼Ò½º, ironyjk (at) kldp.org

/var/mail ¿¡ ÀÖ´Â ¸ÞÀÏÀ» ¿øÇÏ´Â ¸ÞÀÏ ÁÖ¼Ò·Î º¸³½´Ù.

½ÇÇà : cd /var/mail

python stmp.py ID ¸áÁÖ¼Ò

smtp.py

import smtplib , sys

def sendmail ( ff , to , text ) :
    if "@" not in ff :
        print "%s Break" % ff

        return
#   print " toaddr =  %s" % ff
#   print " text ==  %s" % text
    server = smtplib.SMTP('localhost')
    server.sendmail(ff , to , text)
    server.quit()


fromaddr = "root@localhost"
toaddr = sys.argv[2]

f = open ( sys.argv[1] )

line = f.readline()

text = ""

while line :
    if len ( line.split () ) > 2 and line.split ()[0] == "From" :
        sendmail ( fromaddr , toaddr , text )
        fromaddr = line.split ()[1]
        text = ""

    text += line
    line = f.readline()

if text != "" :
    sendmail ( fromaddr , toaddr , text )
    


5.2. bab.py ½Ä´ç ¸Þ´º ÇÁ·Î±×·¥

ÃÖÈñö¾¾ ¼Ò½º , ironyjk (at) kldp.org

Á¡½É¶§ ¹«¾ùÀ» ¸ÔÀ»±î °í¹ÎÇÒ¶§ Çѹø ½ÇÇàÇØÁÖ¸é µË´Ï´Ù.

bab.py

import random,smtplib,sys


list = ['Çѱ¹È¸°ü:Çع°µÈÀå','Çѱ¹È¸°ü:°¥ºñÅÁ', 'Çѱ¹È¸°ü:°¥ºñÅÁ', 'Çѱ¹È¸°ü:ºñºö¹ä','Çѱ¹È¸°ü:¼³··ÅÁ' ,'Çѱ¹È¸°ü:À°°èÀå' ,'»ïÀͽĴç:>¸¸µÎ±¹','»ïÀͽĴç:¹é¹Ý' ,'»ïÀͽĴç:Á¦À°ººÀ½' , '»ïÀͽĴç:±èÄ¡Âî°Ô' , '»ïÀͽĴç:±èÄ¡Âî°Ô' , 'Áß±¹Áý:º¹À½¹ä' , 'Áß±¹Áý:«»Í', 'Áß±¹Áý:>Â¥Àå¸é' , '»ïÀͽĴç:¾ß人À½¹ä' ,'ºÐ½ÄÁý:±èÄ¡º¹À½¹ä','ºÐ½ÄÁý:ºÎ´ëÂî°³']

menu = random.choice (list)

fromaddr = "ID@address.org"
toaddr = "ID@address.org"
msg = "To: %s  Subject:¿À´ÃÀÇ ¸Þ´º!  ¿À´ÃÀÇ ¸Þ´º´Â %s ÀÔ´Ï´Ù." % ( toaddr ,  menu )

if  len ( sys.argv ) >  1 :
  msg = msg + "Áñ°Å¿î Àú³á½Ä»çÀÔ´Ï´Ù. Àú³á½Ä»ç ¾ÈÇÏ½Ç ºÐÀº °ü¸®ÀÚ¿¡°Ô ½Å°í ¹Ù¶ø´Ï´Ù. "


lastmenu = ""
msg += " -- ÇöÀç ¸Þ´º ÇöȲ --  "

for i in list :
  if lastmenu != i :
    msg += " - %s " % i
  lastmenu = i


msg += " »õ·Î¿î ¸Þ´ºÀÇ Ãß°¡´Â ¾ðÁ¦³ª ȯ¿µÇÕ´Ï´Ù.  »õ·Î¿î ¸Þ´º´Â ID@address.org ¸ÞÀÏ º¸³»Áֽñ⠹ٶø´Ï´Ù."

server = smtplib.SMTP('address.org')
server.sendmail(fromaddr, toaddr, msg)
server.quit()
    


5.3. mysql µ¥ÀÌŸ Àоî¿À±â

mysql µ¥ÀÌŸ¸¦ °¡Á® ¿É´Ï´Ù.

    
#!/usr/bin/python

import MySQLdb

db = MySQLdb.connect(host="localhost", db="test", user="root" , passwd="")

hash = db.cursor()
hash.execute("select * from test")
result = hash.fetchall()

for i in result:
    print result[0]

db.close()
    


5.4. ncurse ¿¹Á¦

¼Ò½º

#!/usr/bin/python
import curses
import time

stdscr=curses.initscr()
curses.start_color()
curses.init_pair(1,curses.COLOR_CYAN, curses.COLOR_BLACK)

stdscr.addstr(10,10,"test", curses.color_pair(1))
stdscr.addstr(12,10,"aaaaaaaa", curses.A_REVERSE)

stdscr.refresh()
time.sleep(5)
curses.endwin()
    


5.5. CGIHTTPServer.py »ç¿ëÇϱâ

  1. ¼­¹ö ½ÇÇàÇϱâ

    /usr/lib/python1.5$ python CGIHTTPServer.py
    Serving HTTP on port 8000 ...
            

  2. ·çÆ®±ÇÇÑ »ç¿ëÇϱâ

    vi CGIHTTPServer.py

    nobody = nobody_uid()
    # ¿©±â¼­ ½Ã½ºÅÛÀÇ nobody °èÁ¤ UID¸¦ °¡Á® ¿É´Ï´Ù.
    self.wfile.flush() # Always flush before forking
    pid = os.fork()
    if pid != 0:
        # Parent
        pid, sts = os.waitpid(pid, 0)
        if sts:
            self.log_error("CGI script exit status %#x", sts)
        return
    # Child
    try:
        try:
            # À̺κÐÀ» nobody·Î »ç¿ëÇÒ °æ¿ì´Â ´ÙÀ½°ú °°ÀÌ ÇÏ°í, ·çÆ®¸¦ »ç¿ëÇÒ°æ¿ì´Â ÁÖ¼®Ã³¸®ÇÕ´Ï´Ù.
            os.setuid(nobody)
        except os.error:
            pass
        os.dup2(self.rfile.fileno(), 0)
        os.dup2(self.wfile.fileno(), 1)
        os.execve(scriptfile, args, env)
    except:
        self.server.handle_error(self.request, self.client_address)
            

  3. CGIHTTPServer ¸ðµâ¿¡¼­ CGI ½ÇÇàÇϱâ

    ¸ðµâÀ» ÀÌ¿ëÇؼ­ ´ÙÀ½°ú °°ÀÌ °£´ÜÇÑ ¼­¹ö ÇÁ·Î±×·¥À» ÇÒ¼ö ÀÖ½À´Ï´Ù.

    #!/usr/bin/env python
    
    import CGIHTTPServer
    import BaseHTTPServer
    
    Handler = CGIHTTPServer.CGIHTTPRequestHandler
    
    PORT = 8080
    
    httpd = BaseHTTPServer.HTTPServer(("", PORT), Handler)
    print "Serving at port ", PORT
    httpd.serve_forever()
            

    GIHTTPServer.py ¿¡ ¼Ò½º¿¡ º¸¸é cgi µð·ºÅ丮°¡ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÀÌ µÇ¾î ÀÖ½À´Ï´Ù.

    ÇÊ¿ä½Ã º¯°æÀ» ÇÒ¼ö ÀÖ½À´Ï´Ù.

    cgi_directories = ['/cgi-bin', '/htbin']

  4. cgi ÇÁ·Î±×·¥ (test.py)

    #!/usr/bin/env python
    
    print """Content-type: text/html
    
    ¼º°ø Çß½À´Ï´Ù.
    """
            

    À§¿Í °°Àº ¿¹Á¦¸¦ ÀÌ¿ëÇؼ­ cgi-bin ¹Ø¿¡ ³Ö¾î¼­ ´ÙÀ½°ú °°ÀÌ ½ÇÇàÀ» ÇÏ¸é µË´Ï´Ù.

    http://localhost:8080/cgi-bin/test.py


5.6. mysql Å×ÀÌºí ¼Ó¼º Ãâ·ÂÇϱâ

¼Ò½º

import MySQLdb

connection = MySQLdb.connect(user='root', passwd='', db='nalabi')
cursor = connection.cursor()  # Ä¿¼­ °´Ã¼¸¦ ¾ò¾î¿Â´Ù.
cursor.execute('select * from test')
res = cursor.description
for record in res:
        print "%-10s %-10s %-10s %-10s %-10s %-10s %-10s" % record
cursor.close() 
    

°á°ú

no         3          2          6          6          0          0         
num        3          2          6          6          0          0         
idx        3          2          6          6          0          0         
date       3          9          11         11         0          0         
host       252        13         255        255        0          1         
name       252        6          255        255        0          1         
passwd     253        13         13         13         0          1         
email      252        18         255        255        0          1         
url        252        19         255        255        0          1         
title      252        20         255        255        0          1         
text       252        3243       16777215   16777215   0          1         
refer      3          1          6          6          0          0         
reyn       3          1          1          1          0          0         
reno       3          1          6          6          0          0         
rede       3          1          6          6          0          0         
reto       3          1          6          6          0          0         
html       3          1          1          1          0          0         
moder      3          1          1          1          0          0         
bofile     253        18         100        100        0          1         
bcfile     253        14         100        100        0          1         
bfsize     3          5          4          4          0          1         
    


5.7. µð·ºÅ丮 ±ÇÇÑ ¹Ù²Ù±â

¼Ò½º

import commands, os

import os

out=commands.getoutput("ls -l")
a = out.split ( '\n' )

for x in a:
    b = x.split ()
    if b[0] != "\307\325\260\350"  :
        print b[8]
        cc = "chown %s:%s %s" % (b[8], b[8], b[8])
        commands.getoutput(cc)
    


6. perl

6.1. È­ÀÏ Àаí split Çϱâ

È­ÀÏ Àаí split Çϱâ

#!/usr/bin/perl 

&print_file("/etc/webmin/config");

exit;

sub print_file
{
my ($filename) = @_;

  open(fh,"$filename");

  while(< fh>) 
  {
    ($name,$value) = split(/=/,$_);

    if( $name eq "admin_mail" ) 
    {
      print $value;
    }
  }

  close(fh);
}
    


ID
Password
Join
Troglodytism does not necessarily imply a low cultural level.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-02-03 15:51:14
Processing time 0.0018 sec