hello.c ¼Ò½º
#include <stdio.h> main() { printf ("This is test program"); } |
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 |
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 |
´ëÈ¹æ ¼¹ö ÀÔ´Ï´Ù.
ÄÄÆÄÀÏ : 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); } |
´ëȹæ Ŭ¶óÀÌ¾ðÆ® ÀÔ´Ï´Ù.
ÄÄÆÄÀÏ : 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); } |
ÇÁ·Î±×·¥ ½ÇÇÛÇÒ¶§ÀÇ ÀÎÀÚ Ã³¸® ¹æ¹ýÀÔ´Ï´Ù.
#include <stdio.h> char *programname; // usage() char a; char *b = ""; unsigned int d = 1; void usage (); 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); } void usage () { printf ("»ç¿ë¹ý : %s [-a ÀÎÀÚ] [-b ÀÎÀÚ] [-c ÀÎÀÚ] [-d ÀÎÀÚ]", programname); exit (1); } |
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); } |
ÄÜÆ®·Ñ ŰÀÇ Á¶ÇÕ ÇÒ¶§ »ç¿ëÇÏ´Â ÇÔ¼ö ÀÔ´Ï´Ù.
½Ã±×³Î ÇÔ¼ö : /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 Ä«¿îÅÍ } } 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> main () { struct hostent* hoststruct; char hostname[255]; gethostname(hostname, 100); hoststruct = gethostbyname(hostname); printf("È£½ºÆ® À̸§Àº %s ÀÔ´Ï´Ù.\n", hoststruct->h_name); } |
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")); } |
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) |
¼Ò½º
#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"); } main() { int i; TEST(hello); TEST(goodbye); test(1); test(2); } |
ÄÄÆÄÀÏ
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; } |