C¿Í python¿¡ °üÇÑ Â©¸·ÇÑ ¿¹Á¦ ±è ¿ëÀÏ
nalabi@formail.org
$Date: 2010/02/03 06:51:14 $ 2002 GNU GPL 0.1 2002-11-16 ±è ¿ëÀÏ ÃÖÃÊ ÀÛ¼º template ÇÁ·Î±×·¥À» Çϸ鼭 Æ´Æ´ÀÌ ¿¹Á¦ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í, ´Ù¸¥ °÷¿¡ ÀÖ´Â ¿¹Á¦¸¦ ¸ð¾Æ ³õÀº °ÍÀÔ´Ï´Ù..
¼Ò°³ À̱ÛÀº ÇÁ·Î±×·¥À» Çϸ鼭 Æ´Æ´ÀÌ ¿¹Á¦ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í, ´Ù¸¥ °÷¿¡ ÀÖ´Â ¿¹Á¦¸¦ ¸ð¾Æ ³õÀº °ÍÀÔ´Ï´Ù.. ÁÖ·Î C¿Í python¿¡ °ü·ÃµÈ ¹®¼­ ÀÔ´Ï´Ù. µ¡±Û ÇѱÛÀ» »ì¸®°í ³ª¶ó¸¦ »ì¸®´Â ±æÀº, °úÇÐÀûÀ¸·Î À¸¶ä°¡´Â ¼¼¹ú½ÄÀ» »ç¿ëÇÏ´Â °Í»ÓÀÔ´Ï´Ù. ´ëÇѹα¹ °úÇбâ¼úÀ» »ì¸®´Â±æÀº ½¬¿î Çѱ۷ΠµÈ ¹®¼­¸¦ ¸¸µå°ÍÀÔ´Ï´Ù. ¿Ü±¹¹®¼­¸¦ ÀÚ±â È¥ÀÚ¸¸ º¸°í ¸»°ÍÀÌ ¾Æ´Ï¶ó, ½±°Ô ¹ø¿ª, º¸ÃæÇؼ­ ÃÊÁß°í»ýµé·Î º¼¼ö ÀÖ°Ô ÇØ¾ß ÇÕ´Ï´Ù. ³ª¶ó¸¦ Àß »ì°í, ºÎ°­ÇÏ°Ô ÇØ¾ß ÇÏ´Â ÀÌÀ¯´Â ´Ù¸¥³ª¶ó³ª, ÀÎÁ¾¿¡°Ô ¼­·¯¿òÀ» ¹ÞÁö ¾Ê±â Çϱâ À§ÇÔÀÔ´Ï´Ù. µµ¿Í ÁֽźР°ü·Ã¼­Àû°ú ¿©·¯ ÀÎÅÍ³Ý »çÀÌÆ®¸¦ ¿î¿µÇÏ°í °è½Å ºÐµé²² °¨»çÇÕ´Ï´Ù. ÀúÀÛ±Ç ÀÌ ¹®¼­´Â GNU Free Documentation License ¹öÀü 1.1 ȤÀº ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î Àç´Ü¿¡¼­ ¹ßÇàÇÑ ÀÌÈÄ ÆÇÀÇ ±ÔÁ¤¿¡ µû¸£¸ç ÀúÀ۱ǿ¡ ´ëÇÑ º» »çÇ×ÀÌ ¸í½ÃµÇ´Â ÇÑ ¾î¶°ÇÑ Á¤º¸ ¸Åü¿¡ ÀÇÇÑ º»¹®ÀÇ ÀüÀ糪 ¹ßÃéµµ ¹«»óÀ¸·Î Çã¿ëµË´Ï´Ù. º» ÀúÀÚ´Â ¹®¼­ÀÇ ³»¿ëÀÌ ¾ß±âÇÒ ¼ö ÀÖ´Â ¾î¶°ÇÑ °á°ú¿¡ ´ëÇؼ­µµ Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù. C ÄÄÆÄÀÏ Çϱâ(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 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 ¸ðµâ(¶óÀ̺귯¸®) ±âÃÊ Á¤Àû ¶óÀ̺귯¸® .a °øÀ¯ ¶óÀ̺귯¸® .so, .sa Á¤Àû ¶óÀ̺귯ÀÇ ´ÜÁ¡Àº µ¿½Ã¿¡ ¿©·¯ ÇÁ·Î±×·¥À» ¶ç¿üÀ» °æ¿ì À̵éÀÌ ¸ðµÎ °°Àº ¶óÀ̺귯¸®ÀÇ ÇÔ¼öµéÀ» »ç¿ëÇÔÀ¸·Î½á ¸Þ¸ð¸®¿¡ °°Àº ÇÔ¼öµéÀ» ¿©·¯ ¹ø º¹»çÇÏ°í, ÇÁ·Î±×·¥ ÆÄÀÏ¿¡µµ °°Àº ¶óÀ̺귯¸®¸¦ ¿©·¯ ¹ø º¹»ç¸¦ ÇÑ´Ù´Â °ÍÀÌ´Ù. ÀÌ´Â ¸Þ¸ð¸® ¿ë·®°ú µð½ºÅ© ¿ë·®À» ¸¹ÀÌ ¼Ò¸ðÇÑ´Ù. ¸¹Àº À¯´Ð½º ½Ã½ºÅÛ¿¡¼­´Â ÀÌ·¯ÇÑ ºÒÆíÇÔÀ» ±Øº¹ÇÒ ¼ö ÀÖµµ·Ï °øÀ¯ ¶óÀ̺귯¸®¸¦ Á¦°øÇÑ´Ù. 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 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; } 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; } ÀÎÀÚ Ã³¸® ÇÔ¼ö ÇÁ·Î±×·¥ ½ÇÇÛÇÒ¶§ÀÇ ÀÎÀÚ Ã³¸® ¹æ¹ýÀÔ´Ï´Ù. #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); } 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; } ½Ã±×³Î ÇÔ¼ö ÄÜÆ®·Ñ Å°ÀÇ Á¶ÇÕ ÇÒ¶§ »ç¿ëÇÏ´Â ÇÔ¼ö ÀÔ´Ï´Ù. ½Ã±×³Î ÇÔ¼ö : /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; } È£½ºÆ® À̸§ ¾Ë¾Æ³»´Â ÇÁ·Î±×·¥ ÄÄÆÄÀÏ : 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; } ´Ù±¹¾î Å×½ºÆ® ÇÁ·Î±×·¥(gettext) hello.po¸¦ ¸¸µé¾î ÁØ´Ù. xgettext -a -d hello -k_ -s hello.c mo È­ÀÏÀ» ¸¸µé¾î ÁÖ´Â »ç¿ë¹ýÀÔ´Ï´Ù. msgfmt hello.po messages ¶ó´Â È­ÀÏÀÌ »ý±â´Âµ¥ ÀÌ°ÍÀ» À̸§À» ¹Ù²Ù¾î ÁÖ¸é µË´Ï´Ù. mv hello.po hello.mo ·ÎÄÉÀÏ µð·ºÅ丮¿¡ Ä«ÇǸ¦ ÇÕ´Ï´Ù. cp hello.mo /usr/share/locale/ko/LC_MESSAGES/hello.mo ¼Ò½º¸¦ ÄÄÆÄÀÏ ÇÕ´Ï´Ù. gcc -o hello hello.c ¼Ò½º #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; } 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 "¾È³çÇϼ¼¿ä 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) define ¿¹Á¦ ¼Ò½º #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; } ÄÄÆÄÀÏ gcc -o t test.c ½ÇÇà HELLO !! Good Bye !! This is test_1 function This is test_2 function ã±â¸¦ ¿øÇÏ´ÂÈ­ÀÏ ¼Ò½º #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; } Ä¿³Î ½Ã½ºÅÛ ÄÝ ÇÔ¼ö 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(); } ¸Æ¾îµå·¹½º ¾Ë¾Æ³»±â ¼Ò½º #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; } C++ Ŭ·¡½º¸¦ ÀÌ¿ëÇؼ­ È£½ºÆ® À̸§ Ãâ·Â 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; } °´Ã¼ ¸¸µé¾î¼­ Ãâ·ÂÇϱ⠼ҽº #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 gtk Çùֿ¡¼­ ŸÀÌƲ¹Ù ¾ø¾Ö´Â ¹æ¹ý ¼Ò½º #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` ¹öÆ°¿¡ »ö»ó ³Ö±â ¸®¼Ò½º È­ÀÏ ÀÛ¼ºÇÑ´Ù. (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` python print ¸í·É¾î ¼Ò½º def mesg(): a = 1 return a print mesg() °á°ú 1 ¼Ò½º a = 10 b = 10 def mesg(a, b): c = a + b return c print mesg(a, b) °á°ú 20 ¼Ò½º a = 10 b = 10 def mesg(a, b): c = a + b return c if __name__ == '__main__': print mesg(a, b) °á°ú 20 python °´Ã¼ °øºÎÇϱâ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 "¿À°Ô ¹Ù¸®" °á°ú python hello1.py Kim Yong-Il 3.14159 ¿À°Ô ¹Ù¸® python °´Ã¼ °øºÎÇϱâ2 ¼Ò½º #!/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 "¿À°Ô ¹Ù¸®" °á°ú python hello2.py Current value = "42" ¿À°Ô ¹Ù¸® python °´Ã¼ °øºÎÇϱâ3 ¼Ò½º #!/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 "¿À°Ô ¹Ù¸®" °á°ú python hello3.py Current value = "abc" Current value = "abcxyz" ¿À°Ô ¹Ù¸® python °´Ã¼ °øºÎÇϱâ4 ¼Ò½º #!/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 "¿À°Ô ¹Ù¸®" °á°ú python hello4.py 1 spam 2 spam ¿À°Ô ¹Ù¸® python °´Ã¼ °øºÎÇϱâ5 ¼Ò½º #!/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() °á°ú python hello5.py in Super.method ------------------> starting Sub.method in Super.method ending Sub.method python °´Ã¼ °øºÎÇϱâ6 ¼Ò½º #!/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() °á°ú python hello6.py ending Extender.method Inheritor... in Super.method Replacer... in Replacer.method Extender... starting Extender.method in Super.method Provider... python °´Ã¼°øºÎÇϱâ 7 ¼Ò½º #!/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 °á°ú python hello7.py 3 python °´Ã¼ °øºÎÇϱâ8 ¼Ò½º #!/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], °á°ú python hello8.py 0 1 4 9 16 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 ) 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() 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() 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() CGIHTTPServer.py »ç¿ëÇϱ⠼­¹ö ½ÇÇàÇϱâ /usr/lib/python1.5$ python CGIHTTPServer.py Serving HTTP on port 8000 ... ·çÆ®±ÇÇÑ »ç¿ëÇϱâ 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) 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'] cgi ÇÁ·Î±×·¥ (test.py) #!/usr/bin/env python print """Content-type: text/html ¼º°ø Çß½À´Ï´Ù. """ À§¿Í °°Àº ¿¹Á¦¸¦ ÀÌ¿ëÇؼ­ cgi-bin ¹Ø¿¡ ³Ö¾î¼­ ´ÙÀ½°ú °°ÀÌ ½ÇÇàÀ» ÇÏ¸é µË´Ï´Ù. http://localhost:8080/cgi-bin/test.py 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 µð·ºÅ丮 ±ÇÇÑ ¹Ù²Ù±â ¼Ò½º 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) perl È­ÀÏ Àаí 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); }