Joinc 팀블로그 리눅스 메뉴얼 정리 Joinc 위키
댓글

Recent Comments

Powered by Disqus
팀블로그 카테고리
  전체 (1105)
   공지사항 (1)
   검색엔진 (21)
   기술동향 (58)
   게임 (2)
   독서 (6)
   리눅스 (12)
   보안 (1)
   사회문제 (22)
   어셈블리 (43)
   영화 (3)
   오픈소스 (10)
   음악 (9)
   인물 (1)
   포인터 (4)
   프로그래머 (23)
   팀블로그 (20)
   테터툴즈 (29)
   C/C++ (152)
   FireFox (11)
   Gimp (2)
   Google (98)
   Java (13)
   Perl (2)
   Pthread (11)
   STL (13)
   TCP/IP (8)
   Tools (31)
   Web2.0 (42)
   Wiki (1)
«   2010/03   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
2007/10/30 17:23

심심풀이로 만들어본 C 코드 변환기

C코드를 HTML로 변환 시키는 간단한 프로그램을 만들어 봤습니다. 하일라이팅은 아니고, 정규표현을 이용해서 함수라고 판단되는 문자열은 man page로 링크를 걸어주는 프로그램입니다. 대략 a-zA-Z0-9+( 의 패턴을 가지는 문자열을 함수로 간주하게 됩니다. 링크는 joinc man page에 있는 함수를 찾도록 되어 있습니다. 만약 등록된 함수가 없다면 google 개인화 검색 으로 넘어갑니다.

man page를 기준으로 하기 때문에, 유닉스환경에서의 C코드만 제대로 변환 될겁니다. 시간이 되면, Java 나 MSDN 문서를 참조할 수 있도록 확장해봐야 겠습니다. PHP도 괜찮을거 같구요.

다음은 변환된 코드입니다. 코드변환기는 여기를 방문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>

#define SA struct sockaddr

int main(int argc, char **argv)
{
int i, maxi, sockfd;
int nread;
int state = 0;
int port;
int n;
int fd;
int clilen;

char buf_out[1024];
char buf_in[1024];
char *header;

int server_sockfd, client_sockfd;

struct sockaddr_in clientaddr, serveraddr;

// socket 함수를 이용해서 end-point 소켓을
// 만든다.
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&serveraddr, sizeof(serveraddr));

serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
serveraddr.sin_port = htons(8080);

// 소켓특성을 묶어준다.
bind (server_sockfd, (SA *)&serveraddr, sizeof(serveraddr));
if ((state = listen(server_sockfd, 5)) == -1)
{
perror("listen error : ");
exit;
}

header = "HTTP/1.1 200 OK\n"
"Date: Fri, 01 Feb 2002 01:34:56 GMT\n"
"Server: Apache/1.3.19 (Unix) PHP/4.0.6\n"
"X-Powered-By: PHP/4.0.6\n"
"Connection: close\n"
"Content-Type: text/html\n\n";

while(1)
{
clilen = sizeof(clientaddr);

// socket() 함수를 이용해서 만들어진 end-point 소켓지정번호인
// server_sockfd 에 연결이 들어오는지를 기다린다.
if ((client_sockfd = accept(server_sockfd, (SA *)&clientaddr, &clilen)) == -1)
{
perror("accept error : ");
close(client_sockfd);
}

fd = open("/root/index.html", O_RDONLY);

memset(buf_in, 0x00, 1024);
while ((n = read(client_sockfd, buf_in, 1024)) > 0)
{
break;
}

printf("ok end\n");
write(client_sockfd, header, strlen(header));

while ( (n = read(fd, buf_out, 255)) > 0)
{
write(client_sockfd, buf_out, n);
bzero(buf_out, 0x00, 255);
}
close(client_sockfd);
}
}

:::