'develop'에 해당되는 글 84건
- 2006.12.19 mysql 새로운 사용자 계정 설정법
- 2006.12.15 mingw + eclipse로 windows에서 개발하기
- 2006.12.11 [리눅스]메세지 큐를 이용한 serial & key & timer check
- 2006.12.09 [Linux] key & serial 멀티 프로세서로 처리하기
- 2006.11.29 [리눅스] sleep & usleep
- 2006.10.16 [데이터변환] strtoul
- 2006.10.16 난수 함수 - rand, srand
- 2006.08.22 [리눅스] 현재 시간을 자신이 원하는 포맷으로 출력하기
- 2006.08.21 프로세스 찾아서 지우고 실행하기
- 2006.08.21 데몬 프로그램 만들기
mysql 새로운 사용자 계정 설정법
|
'develop > sql' 카테고리의 다른 글
mysql 설치 문제 (0) | 2006.12.19 |
---|---|
mysql 관리용 툴 (0) | 2006.12.19 |
mysql 사용자 추가하기 (0) | 2006.12.19 |
mysql 외부에서 접속하기 (0) | 2006.12.19 |
mingw + eclipse로 windows에서 개발하기
Eclipse C/C++ 개발환경 갖추기(2002.10.1) | ![]() |
JLab 편집실 전지원(meeky)
Eclipse C/C++ 개발환경 갖추기
Eclipse의 본래 목적은 java뿐만 아니라 모든 언어의 통합개발을 할 수 있는 IDE를 만들자는 것이었습니다. 아직은 java개발환경 지원이 활발하지만 C/C++, Delphi, Pascal등 다양한 언어를 지원하는 IDE Tool이 개발 중에 있습니다. java 개발환경을 Eclipse에서 JDT라고 하는 것 처럼, C/C++ 개발 환경인 CDT가 개발 중에 있습니다. 아직 1.0 version이 나오지 않았지만 개발버전을 사용할 수 있습니다. Eclipse를 이용하여 C/C++을 개발할 수 있는 환경을 만들고, 예제인 Hello World 프로그램을 작성해 보도록 하겠습니다.
1.먼저 CDT를 다운 받습니다.
CDT는 http://www.eclipse.org/cdt/ 사이트에서 Download를 클릭하고 날짜가 가장 최신인 버전을 다운 받으면 됩니다.
2.압축을 plugins과 features가 나옵니다. 두 폴더를 복사를 하여 eclipse 폴더아래 복사를 합니다. 저는 d:\elipse 폴더에 복사를 합니다.
3.이클립스를 실행하고, toolbar의 새로만들기 버튼을 눌러보면 C, C++ 프로젝트가 생성할 수 있는 메뉴가 있음을 볼 수가 있습니다.
4.프로젝트를 생성을 합니다.
5.프로젝트를 생성하면 오른쪽에 C/C++프로젝트 라는 Navigator가 보입니다. 프로젝트 폴더를 선택하고 오른쪽 버튼을 눌러 New>file 을 선택합니다.
6.파일명에 hello.c라고 입력합니다. 아래나오는 화면과 같이 C/C++ Editor에 입력합니다.
7.다시 프로젝트 폴더를 선택하고 오른쪽 버튼을 눌러 New/file을 선택합니다.
8.파일명에 makefile이라고 입력하면 파일이 생성됩니다. 오른쪽 Editor화면에 아래 화면과 같이 입력합니다.
9.다시 프로젝트 폴더를 선택하고 Build를 눌러봐도 아무런 일이 일어나지 않습니다. 이것은 C/C++ Compiler가 설치되어 있지 않아서 입니다. Visual C++을 쓸수도 있지만 GNU Compiler를 사용해 봅니다.
10.Windonws GNU 개발사이트 주소는 http://www.mingw.org/ 입니다. 다운로드는 http://sourceforge.net/project/showfiles.php?group_id=2435&release_id=38019 에서 다운 받습니다. 분홍색으로 하이라이트되어 있는 곳에 MinGW-2.0.0-3.exe를 다운 받습니다.
설치를 간단하므로 생략하겠습니다. 설치는 MinGW-2.0.0-3.exe더블클릭하고 나오는 지시를 그래도 따르면 됩니다. c:\MinGW폴더에 설치가 되었을 것입니다. MinGW-2.0.0-3.exe를 다운 받은 화면 아래 make-3.79.1-20010722.tar.gz파일도 다운 받아 압축을 풉니다. 압축을 풀어 나온 파일을 c:\MinGW\bin아래에 복사를 합니다.
환경변수에 c:\MinGW\bin을 Path에 추가를 합니다.
11.이클립스를 종료하고 다시 실행합니다. HelloWorld폴더를 선택하고 마우스 오른쪽 버튼 클릭한 후 Build를 실행합니다.
12.Compile되는 화면이 보이고 화면 하단에 C-Build 메시지가 보입니다. 화면과 같은 메시지는 warning이니 무시하셔도 됩니다만 화면에 나오는 메시지대로 hello.c파일 맨 마지막 "}"다음에 엔터를 하면쳐서 Newline을 만들어주면 warning메시지가 사라질것입니다.
13.hello.exe를 더블클릭하여 실행시켜 주십시오.
command 창에 Hello World가 보입니다. 엔터를 치면 command창이 사라집니다.
정말 간단한 예제를 만들어 보았습니다. 아쉽게도 저는 C/C++은 잘 모릅니다. 부디 C/C++ 잘 아시는 분께서 앞으로 Eclipse에서 C/C++개발을 많이 하셔서 Eclipse-java게시판 Eclipse-C/C++ 게시판이 만들어지고 Eclipse 사용이 활발해졌으면 좋겠습니다.
www.jlab.net
이 글은 정보 공유를 위해 쓰여 졌으며 JLab 정보 공유 약관을 지켜주시는 모든 곳에서 자유롭게 공유 하 실 수 있습니다. 오탈 자나 건의는 이곳에 해주십시오
'develop > dogvelop' 카테고리의 다른 글
[리눅스]메세지 큐를 이용한 serial & key & timer check (0) | 2006.12.11 |
---|---|
[Linux] key & serial 멀티 프로세서로 처리하기 (0) | 2006.12.09 |
[리눅스] sleep & usleep (0) | 2006.11.29 |
[리눅스] 현재 시간을 자신이 원하는 포맷으로 출력하기 (0) | 2006.08.22 |
프로세스 찾아서 지우고 실행하기 (0) | 2006.08.21 |
[리눅스]메세지 큐를 이용한 serial & key & timer check
* 부모와 자식 프로세서로 나누고,
* 부모프로세서에서는 시리얼로 부터 데이터를 받아 들이고,
* 자식프로세서는 time out체크와, CANCEL키 체크를 하도록 했다.
* 두 프로세서 간의 통신은 메세지 큐를 이용했다.
*
* 이 프로그램은 자식 프로세서에 걸린 timer가 지정된 시간을 초과시
* 부모 프로세서에게 "TIMEOUT"메세지를 보내면, 부모 프로세서가 자식
* 프로세서에게 SIGTERM을 보내서 자식 프로세서를 끝내고,
* 부모 프로세서는 자식 프로세서가 종료 됐다는 것을 알게 되면(waitpid)
* 프로그램을 종료 하도록 만들었다.
*/
#include "include.h"
#define MOL
#include "app_pub.h"
#include "app_def.h"
#include "app_func.h"
#define SIZE 10
#define KEY 1234
struct {
long mtype;
char data[SIZE];
} msg_data;/**< 메세지 큐에서 사용할 메세지 구조체*/
int main(void)
{
struct pollfd Event;
sigset_t set,oldset,pend;
int pid,cnt,status,child,i,j;
char kch;
int msgid;/**< msgget()으로 가져온 메세지 큐의 id를 저장할 변수*/
i = j = 0;
if ((pid=fork()) < 0)
{
perror("fork() Error");
exit(1);
}
if (pid)
{ //parent
// 부모 프로세서에서 메세지큐를 생성한다.
// 메세지 큐를 만든다.(mode 0666)
// 동일한 key의 메세지 큐가 있으면, 식별자만 반환(IPC_CREAT)
if ((msgid = msgget((key_t)KEY,IPC_CREAT|0666)) == -1)
{
perror("msgget() Error");
exit(1);
}
printf("parent msgid %d\n",msgid);
sio_set(PRIVATE_PORT,B9600);
memset(tempbuf,0,sizeof(tempbuf));
rlen = 0;
Event.fd = fd;
Event.events = POLLIN | POLLERR;
while(1)
{
child = waitpid(pid,&status, WNOHANG);
cnt = poll((struct pollfd *)&Event,1,1000);
if (cnt < 0)
{
perror("parent poll() Error");
exit(1);
}
else
if (!cnt)
{
printf("Parent %d\n",i++);
// 1초마다.메세지 큐에 있는 메세지를 읽는다.
// 메세지가 없으면, 기다리지 않고 -1을 리턴하고 넘어간다.
// msg_data.mtype = 1인 것만 읽어온다.
// msg_data.mtype 에 상관없이 맨 앞에것만 읽어온다.
if (msgrcv(msgid,&msg_data,SIZE,0,IPC_NOWAIT) > 0)
{ // 메세지가 있으면,
printf("msg_data mtype = %ld\n",msg_data.mtype);
printf("msg_data = %s\n",msg_data.data);
if (strstr(msg_data.data,"TIMEOUT"))
{
// 메세지 큐(msg_data.data)가 "TIMEOUT"인 경우에는
// 프로그램을 종료한다.
if (msgctl(msgid,IPC_RMID,0) == -1)
{
perror("child msgctl() Error");
release_timer();
exit(1);
}
printf("msgid(%d) Delete\n",msgid);
// child process에는 테스트를 위해 종료 부분을 뺐다
kill(pid,SIGTERM);
}
}
if (child>0)
{
printf("Child Process Term\n");
exit(1);
}
}
else
if (cnt)
{
RCH = com_getc();
tempbuf[rlen++] = RCH;
printf("tempbuf[]>> \n");
printf("%s \n",tempbuf);
}
}//while
}//parent
else
{ //child
// KEY를 갖도록 메세지큐를 생성 또는 기존에 있으면, 메세지ID(msgid)
// 를 얻어온다.(기존에 메세지 큐가 있으면, 접근 모드는 무시된다.)
if ((msgid = msgget((key_t)KEY,IPC_CREAT|0666)) == -1)
{
perror("child msgget() Error");
exit(1);
}
keyhandle = open("/dev/key",O_RDWR);
printf("child msgid %d",msgid);
Event.fd = keyhandle;
Event.events = POLLIN | POLLERR;
sigemptyset(&set);
sigaddset(&set, SIGALRM);
sigprocmask(SIG_BLOCK,&set,&oldset);
set_timer(10);
while(1)
{
cnt = poll((struct pollfd *)&Event,1,1000);
if (cnt < 0)
{
perror("child poll() Error");
exit(1);
}
else
if (!cnt)
{
printf("Child %d\n",j++);
sigpending(&pend);
if (sigismember(&pend,SIGALRM))
{
//struct msgbuf에 type(long)값을 꼭 줘야 한다.
//(msgsnd()시, type에 값이 없으면, argument error가 난다.
msg_data.mtype = 1;
strcpy(msg_data.data,"TIMEOUT");
if (msgsnd(msgid,&msg_data,strlen(msg_data.data),0) ==-1)
{
perror("child msgsnd() Error");
release_timer();
exit(1);
}
release_timer();
// set_timer()의 타임아웃을 체크했으면,
// 시그널들을 원래대로 되돌린다.
sigprocmask(SIG_SETMASK,&oldset,NULL);
}
}
else
if (cnt)
{
kch = GetKey();
if (kch == CANCEL)
{
msg_data.mtype = 1;
strcpy(msg_data.data,"CANCEL");
if (msgsnd(msgid,&msg_data,strlen(msg_data.data),0) == -1)
{
perror("child msgsnd()2 Error");
exit(1);
}
//release_timer();
//exit(1);
}
}
}//while
}//chile
}
'develop > dogvelop' 카테고리의 다른 글
mingw + eclipse로 windows에서 개발하기 (0) | 2006.12.15 |
---|---|
[Linux] key & serial 멀티 프로세서로 처리하기 (0) | 2006.12.09 |
[리눅스] sleep & usleep (0) | 2006.11.29 |
[리눅스] 현재 시간을 자신이 원하는 포맷으로 출력하기 (0) | 2006.08.22 |
프로세스 찾아서 지우고 실행하기 (0) | 2006.08.21 |