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;
}
|