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
#include <iostream> 
#include <map> 
#include <vector> 
 
using namespace std; 
 
int main() 
    map<intint>    mapTest; 
    mapTest.insert( pair< int,int >( 1,0 ) ); 
    mapTest.insert( pair< int,int >( 2,0 ) ); 
    mapTest.insert( pair< int,int >( 3,0 ) ); 
    mapTest.insert( pair< int,int >( 4,0 ) ); 
    mapTest.insert( pair< int,int >( 5,0 ) ); 
 
    vector<map<intint>> vmVectorTest; 
    vmVectorTest.push_back(mapTest); 
 
    vector<map<intint>>::iterator vitr; 
    vitr = vmVectorTest.begin(); 
 
    map<intint>::iterator mapitr; 
    mapitr = vitr->begin(); 
 
    do 
    { 
        cout << mapitr->first << " , " << mapitr->second << endl; 
 
        ++mapitr; 
    }while(mapitr != vitr->end()); 
 
    return 0; 
}

vector에 map을 담을 생각을 한 이유는 자유롭게 변형되는 맵 배열을 생각하게 되었다.

현재로써는 사용량이 빈번하지 않을 것으로 예상되지만 유용하게 사용할 일이 있을거란 생각에 테스트 코드를 작성하게 되었다.

 

위의 코드를 보면 vector에 map을 담았지만 다른 각도로 보면 다양한 STL 컨네이너들이 각자 상황에 맞게 포함 될 수 있음을

의미한다. 이 의미는 자유롭게 사용하여 필요할 때 꺼내 사용하면 된다.

 

퍼포먼스를 먼저 생각하는 분이라면 하나의 연산이라도 하지 않아야 한다는 가정이 붙겠지만 일단 요즘 시대의 컴퓨터는

이 정도의 내용을 허용하므로 자유롭게 사용하는게 더 이익일 수있다는 사실을 생각하면 좋다.

 

고정형의 배열을 사용하거나 매번 new를 이용한 배열 생성의 형태라면 vector가 더 효과적이므로 한번 정도 생각을 해볼 수 있는

문장이다.


'Databases > MongoDB' 카테고리의 다른 글

[MongoDB] DB 접속하기  (0) 2013.09.03
[MongoDB] Replica set  (0) 2013.08.12

Replication DB 여러개 사용하는 방법은 간단하다.

Replication이 이미 설정이 완료되어 정상적으로 돌아간다는 전제로 설명할 예정이다. 


혹시 설정이 궁금하시다면 아래 설정 설명이 되어 있는 곳을 참조하면 된다.

링크 주소 : http://foxlime.tistory.com/70

 

1. my.cnf 파일 수정 (/etc/my.cnf)

 replicate-do-db=[DB Name]   << 추가 해 놓은 이 부분을 늘려주면 된다.

 

replicate-do-db= no1_data

replicate-do-db= no2_data

replicate-do-db= no3_data

 

저장하면 설정은 끝난다.

 

2. 데이터베이스 준비

우선 mysql 명령어로 접속하여 stop slave;를 해준 뒤

" no1_data, no2_data, no3_data" DB에 dump file을 밀어 넣어준다. 

 

 3. MySQL 재시작 그리고 slave 재시작

#> service mysqld restart

#> mysql -u[계정] -p

>start slave;

 

여러개의 DB를 replication하는 이유는 DB간의 서로 연결이 되어 있는 Query를 사용한다면 Query문제로 에러를 보게 된다. 이러한 에러를 해결하기 위해 필수적으로 Query문에서 Join을 사용한다면 꼭 필수적으로 여러개의 DB는 Replication되어야 한다.

'Databases > MYSQL' 카테고리의 다른 글

mysql - start / stop / restart  (0) 2013.01.03
mysql - 인덱스 정보 정리  (2) 2012.10.05
mysql - BinLog 파일 Text 변환  (0) 2012.02.27
mysql - Replication (Master/Slave 구조) 설정  (0) 2012.02.23
mysql - my.cnf 설정할 때 참고  (0) 2012.02.23

 MySQL  config flie - my.cnf

 /etc/my.cnf

 

[mysqld]

...............

slave-skip-errors=1062

..............

 

MySQL - start / stop /restart

 /etc/init.d/mysqld

 

# service mysqld start

# service mysqld stop

# service mysqld restart

 

시작 → 프로그램 → 보조 프로그램 → 원격 데스크톱 연결

 

 

시작 → 실행 → mstsc 

 

 

 

'OS > WINDOWS' 카테고리의 다른 글

[WIN7] 윈도우 웹서버(IIS) 설치  (0) 2015.04.30
[Windows] Network IP 충돌 현상 검사  (0) 2012.12.12
[Windows] NETWORK 열린 포트 확인  (0) 2012.08.22

c:\>nbtstat  -a  xxx.xxx.xxx.xxx

 

[ 옵션 ]

nbtstat -a  지정한 컴퓨터 이름을 사용하는 원격 컴퓨터의 이름 테이블을 표시한다.
nbtstat -A  지정한 IP 주소를 사용하는 원격 컴퓨터의 이름 테이블을 표시한다.

nbtstat -c  IP 주소를 포함한 NetBIOS 이름 캐시의 내용을 표시한다.

nbtstat -n  로컬 NetBIOS 이름 목록을 표시한다.

nbtstat -R  NetBIOS 이름 캐시에서 모든 이름을 제거한후 LMHOSTS 파일을 다시 읽어 들인다.
nbtstat -r   윈도우 네트워킹 이름 해석에 대한 통계를 표시한다.

nbtstat -S  원격 컴퓨터를 IP 주소로 나열한 클라이언트와 서버 세션을 표시한다.

nbtstat -s  클라이언트와 서버 세션을 모두 표시한다.

 

'OS > WINDOWS' 카테고리의 다른 글

[WIN7] 윈도우 웹서버(IIS) 설치  (0) 2015.04.30
[Windows] 원격 데스크톱 실행  (0) 2012.12.26
[Windows] NETWORK 열린 포트 확인  (0) 2012.08.22

프로퍼티스 (성질, 특징) 창을 열어 아래 경로의 항목을 True로 변경 시켜준다.

Properties  ->  Appearance  ->  Abolute Align  -> True

 

 변경이 완료되면 Properties 창 하단에 아래와 같이 pos설정할 수 있는 항목이 생긴다.

 

Center -> False 상태에서는 X, Y Position을 설정할 수 있다. True 상태라면 중앙에 위치하게 된다.

0, 0 좌표는 화면 왼쪽 상단의 기본 좌표이다. 좌표를 설정하고 싶다면 픽셀단위 값을 확인 후 입력하면 된다.

 

 

로그 조사를 할 때 자주 사용하는 grep 명령어를 정리한다.

 

1. 지정된 파일내에서 단어 찾기

#grep  "찾을 단어"  FileName

 

  Ex)  #grep "Login>"  SvrLog121116_0100    <┘

 

 

2. 지정된 파일내에서 포함된 단어가 몇개인지 확인하기

 #grep  -c  "찾을 단어" FileName

 

 

3. 단어 대소문자 구분 없이 찾기

  #grep   -i  "찾을 단어"  FileName

 

 

4. 몇번째 라인에 이 단어가 포함되어 있는지 확인

 #grep -n "찾을 단어" FileName

 

 #grep -n1 "찾을 단어" FileName

   > 숫자를 입력하면 위 아래 1줄씩 포함하여 출력해준다.

 

 

5. 다른 명령어와 혼합하여 사용하기

 #ps -aef |grep cron

#ls |grep DB

 

#grep [찾을 단어]

명령문을 수행하여 필요한 단어만 찾고 싶을 때 사용한다.

 

 

 

▷ 포인터의 개념 정리

  - 주소를 가르킨다.

  - 메모리는 주소를 가지고 있고 주소를 통해 메모리 접근이 가능하다. 이 주소를 저장하고 있는게 바로 포인터이다.

  - 거대한 데이터(struct와 같은)를 전달 인자(매개 변수)로 전달하는 것은 메모리 낭비이므로 포인터를 전달하면

     거대한 데이터의 위치(주소)만 전달하면 되므로 효과적으로 사용할 수 있다.

 

 ▷ 흔히 책에 있는 예제

    int  nCount = 100;

    int *pCnt;

    pCnt = &nCount;

 

▷ 경험에 의한 예제

   struct stUserBaseInfo{

        int  nUserIdx;

        char[50] nCharName;

        int nCharIdx;

  }; 

   // 위의 이런 구조체가 있다는 가정이라면 거대한 데이터가 된다.

   stUserBaseInfo  meInfo;

   stUserBaseInfo  *pMeInfo;

   pMeInfo = (* stUserBaseInfo) meInfo;

                 ------------------

                     └> "데이터형 변환자"라 부른다.

  // 즉 구조체를 가지는 거대한 데이터나 클래스를 통째로 넘겨 처리가 필요하다면 포인터로 주소만 넘기는

      방법이 보다 효과적이라는 사실이다.

 

▷ 또 다른 예제

   int*  p_info;

  char*  p_chInfo;

  //다른 데이터형일 경우 주소를 가르키려면?

 

  p_chInfo = (char *) p_info;

                 -------

                    └> "데이터형 변환자"를 이용하여 다른 데이터형일 경우 주소를 가르킨다.

 

  p_info가 가르키는 주소  :  p_info

  p_chInfo가 가르키는 주소 : (int *) p_chInfo

 

 

 

▷ 포인터와 const 

  int  gorp = 16;

  int  chips = 12;

 

                      ┌> 다른 변수를 지시할 수 있다. ( p_snack = chips; )

                 ----------

  const  int  *  p_snack = &gorp;

  --------

      └> 지시하는 값은 변경할 수 없다. ( *p_snack = 20; )

 

 

                      ┌> 지시하는 변수는 변경 불가능!!

              -------------

    int  *  const  p_snack = &gorp;

   -----

      └> 값 변경 가능.

 

▷ 더블 포인터

   - 다차원 배열을 접근하는데 사용된다.

   - 책에 나와 있는대로 포인터는 더블 포인터로 받는다라는 부분도 맞겠지만 엄밀히 말하자면 더블 포인터는

     다차원 배열을 접근하는데 유용하게 사용된다는 점이다.

  char*  double_arr[] = {"abc", "def"};

  char** ptr_arr = double_arr;

 

  cout << ptr_arr[0] << endl;

 

출력 결과

abc

 

▷ 다차원 배열을 사용하지 않는 경우

   char*  double_arr[] = {"abc", "def"};

   char*  ptr_arr  =  double_arr[0];

 

   cout << "ptr_arr  :  "  << ptr_arr << endl;

   // 다차원 배열 접근이 아니라면 이렇게 접근이 가능하다.

 

 

'Languages > cplusplus' 카테고리의 다른 글

[STL] Vector + Map 연습 코드  (0) 2013.07.19
[MFC] Dialog Box 위치 변경  (0) 2012.11.26
지수표기 / enum / new 메모리 할당  (0) 2012.10.12
데이터 형변환  (0) 2012.09.26
32bit 자료형 / 64bit 자료형의 크기 정리  (0) 2012.09.26

 

 지수 표기

  +5.37E+16

 

0.000E+N 형식은 소수점을 오른쪽으로 N자리만큼 이동하는 것이고

0.000E-N은 소수점을 왼쪽으로 N자리만큼 이동하는 것이다.

 

 

 → enum

                 ┌>     열거형의 변수 선언할 때 사용됨.  

  enum  spectrum  { red, orange, yellow, green, blue };

                             ------------------------------

                                                  └> 열거자들

 

Ex)  spectrum  band;

       └> spectrum형 열거형 변수는 이미 선언된 값만 대입 가능하다.

             선언 후 값을 대입하지 않으면 Error를 발생한다.

       band = yellow;    // true

       band = 100;        // false   (열거자가 아니므로 실패)

 

→ 열거자가 아닌 값을 대입하고 싶다면?

       band = spectrum(100);

 

 

 → new 메모리 할당

 [typename] * [pointer_name] = new [typename];

 

Ex)  int  *pn = new  int;

                    --------

                         └> int형 데이터를 저장할 새로운 메모리가 필요하다고 프로그램에 알린다.(heap memory)

 

* 컴퓨터의 메모리가 부족하여 new의 메모리 할당 요청을 허용할 수 없는 경우 new는 0값을 리턴한다.

                                                                                                          ----------

                                                                                                        NULL pointer

 

        delete pn;    //메모리 해제 (해제하지 않으면 메모리 누수 발생)

 

* new를 사용하여 메모리를 할당 후 메모리 해제가 필요한 경우 delete를 사용한다.

  메모리 해제가 필요한 경우는 사용할 데이터가 필요가 없는 경우일 뿐이다.

 

 

  정적 바인딩 (static binding)

     사용이 되든 안되는 항상 메모리를 차지하는 방식 (Ex : 배열)

 

 → 동적 바인딩 (dynamic binding)

     new를 사용하면 배열을 실행 시간에 생성할 수 있고 필요 없으면 생성하지 않을 수 있다.

     또는 프로그래미을 실행하는 동안에 배열의 크기를 결정할 수 있다.

 

 int  *psome = new  int[10];        // new를 사용한 동적 배열 생성 예제

 delete[] psome;  //동적 배열 해제.

 

 

인덱스를 사용해야 하는 경우는?

   - 데이터 양이 많고 검색이 변경보다 빈번한 경우

   - 필드의 값이 다양한 값을 가지는 경우

 

▷ 기존 테이블에 인덱스 추가

ALTER  TABLE  [테이블명]  ADD  INDEX(필드명(크기));

 

▷ 테이블 생성시 인덱스 추가하기
CREATE TABLE 테이블 명 ( 필드명 데이터타입(데이터크기),
INDEX(필드명(크기)) ENGINE MyISAM;

 

▷ FULLTEXT 인덱스 만들기

ALTER TABLE 테이블명 ADD FULLTEXT(필드명);


일반적인 인덱스와는 달리 MySQL의 FULLTEXT는 매우 빠르게 모든 텍스트 열을 검색한다. 검색 엔진과 유사한 방법으로 자연 언어를 이용해 검색할 수 있는 특별한 인덱스로 모든 데이터 문자열의 단어를 저장하기 때문이다.


참고사항
FULLTEXT 인덱스는 MySQL의 기본 저장 엔진 타입인 MyISAM 테이블에만 사용된다.
만약 테이블을 MyISAM 으로 변경해야 된다면
ALTER TABLE 테이블명 ENGINE = MyISAM;
FULLTEXT 인데스는 CHAR 와 VARCHAR, TEXT 열로만 생성 가능하다.

 

▷ 인덱스 정보 보기

SHOW  INDEX  FROM  [테이블명];

 

▷ 인덱스 삭제

ALTER  TABLE  [테이블명]  DROP  INDEX  [인덱스명];

 

 

* 이해를 돕기 위한 링크

http://www.sqler.com/392661

char * itoa (int value, char * str, int base);

숫자를 문자열로 형변환이 필요한 경우 사용되는 함수이다.

 

첫번째 전달인자 : 변환할 변수

두번째 전달인자 : 저장할 곳

세번째 전달인자 : 변활할 진수 (2진수, 8진수, 10진수 등등)

 

char buf[10];

int a = 11111;

itoa( a, buf, 10);

=====================================================================

숫자를 문자열로 변환

int a = 10;

CString str;

str.format ("%02d", a);



Date(날짜)를 문자열로 바꾸어 전송이 필요할 때 (숫자를 문자열로 변환하는 것도 동일하다)

void CRDB::TMDATE(CString *s, time_t tmv)
{
     tm *ptm;
     ptm=localtime(&tmv);
     s->Format("%d-%02d-%02d",ptm->tm_year+1900,ptm->tm_mon+1,ptm->tm_mday);
}

void CRDB::TMTIME(CString *s, time_t tmv)

     tm *ptm;
     ptm=localtime(&tmv);
     s->Format("%02d:%02d:%02d",ptm->tm_hour,ptm->tm_min,ptm->tm_sec);
}

 

문제가 되는 코드들에 대해 예제로 정리된 사이트

http://wiki.kldp.org/wiki.php/32bitCodeTo64bit

 

개발할 때 이해를 돕는 사이트

http://blog.naver.com/PostView.nhn?blogId=kkpa1002&logNo=20106022381

http://rusy.tistory.com/entry/32%EB%B9%84%ED%8A%B8-vs-64%EB%B9%84%ED%8A%B8-WIN32-vs-WIN64

 

자료형 

32 bit OS

64bit OS 

 int

 32 bit (4 Byte)

 32 bit

 short

 16 bit

 16 bit

 long

 32 bit

 64 bit

 longlong

 64 bit

 64 bit

 pointer (*)

 32 bit

 64 bit

 long double

 12 bytes

 16 bytes (128 bit)

 size_t , ssize_t

 32 bit

 64 bit

 typedef

 

 

 

#include <stdio.h>
#include <stdlib.h> #include <limits.h>

int main(void)
{

        printf("### 1 Byte = 8 bit ###\n");
        printf("int : %d byte\n",sizeof(int));
        printf("unsigned int : %d byte\n",sizeof(unsigned int));
        printf("long int : %d byte\n",sizeof(long int));
        printf("unsigned long int : %d byte\n",sizeof(unsigned long int));
        printf("long long int : %d byte\n",sizeof(long long int));
        printf("float : %d byte\n",sizeof(float));
        printf("double : %d byte\n",sizeof(double));
        printf("long double : %d byte\n",sizeof(long double));
        printf("(void *) : %d byte\n",sizeof(void *));
        printf("\n");
        printf("INT_MAX = %d\n", INT_MAX);
        printf("UINT_MAX = %ud\n", UINT_MAX);
        printf("LONG_MAX = %ld\n", LONG_MAX);
        printf("ULONG_MAX = %lud\n", ULONG_MAX);

        return 0;

}

아래는 64bit에서의 결과의 예제이다.

### 1 Byte = 8 bit ###
int : 4 byte
unsigned int : 4 byte
long int : 8 byte
unsigned long int : 8 byte
long long int : 8 byte
float : 4 byte
double : 8 byte
long double : 16 byte
(void *) : 8 byte

INT_MAX = 2147483647
UINT_MAX = 4294967295d
LONG_MAX = 9223372036854775807
ULONG_MAX = 18446744073709551615d

몇 가지 유의사항

  • 64bit에서는 포인터의 크기와 int의 크기가 다르다. sizeof(void *) != sizeof(int).
  • 포인터의 크기가 64bit이기 때문에 그 메모리 주소 연산은 32bit의 환경과 다르게 된다.
  • 64bit에서 long 형태의 값을 int 형태로 cast할 때 주의해야 한다. 64bit에서는 sizeof(long)

!= sizeof(int). 그러나 32bit 환경에서는 sizeof(int) == sizeof(long) = 32bit = 4byte.

  • 64bit에서 long 형태의 값을 double으로 cast할 때는 정확도의 손실이 생길 수 있다. significant

figure의 갯수가 long 형태와 double 형태가 다르다는 것을 숙지해야 한다.

  • Fortran에서 integer와 real의 기본 크기는 64bit에서도 여전히 32bit = 4byte이므로, 64bit

integer를 쓰기 위해서는, kind를 이용하거나 아니면 INTEGER*8를 명시해야 한다.

 

Visual Studio를 실행하면 제일 먼저 반기는 첫 화면(Start Page)이다.

Project를 백업해 둔 상태에서 경로는 다른데 동일한 이름이 존재하는 경우 헷갈리지 않도록 하나는 삭제하고 싶은 경우 사용하게 되었다.

 

 

레지스트리 편집기를 연다.

아래의 경로를 찾아 들어가면 리스트가 보인다.

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\ProjectMRUList

 

File1 ~ File5가 존재하는데 중간 값을 삭제한 경우 숫자가 연결될 수 있도록 수정해야만 리스트가 안보이는 현상을 없앨 수 있다. File1을 삭제하고 숫자를 수정하지 않는다면 레지스트리에는 리스트가 존재하지만 Visual Studio를 실행하면 리스트를 볼 수 없는 상태가 된다.

 

위의 과정을 모두 마쳤다면 Visual Studio를 실행하면 리스트가 정상적으로 삭제되고 내가 원하는 리스트를 볼 수 있다.

'Tools > Visual studio' 카테고리의 다른 글

[VS] Fonts + Themes  (0) 2016.03.04
[visual studio] Quick Open File Tools  (0) 2015.05.12
[VS] 프로젝트 멀티 실행 (디버그 모드)  (0) 2013.08.02

평소에는 별 필요 없지만 언제 누가 입력을 했는지 추적할 때 아래의 명령을 사용한다.

 

#export HISTTIMEFORMAT = "%F  %T "

#history

 

%F  :  날짜

%T  :  시간

 

원래대로 되돌리고 싶다면

#export HISTTIMEFORMAT = " "

 

 

참고 : " " 안에 마지막에 공백을 넣어줘야 명령어가 붙어 출력되는 현상을 방지할 수 있다.

 

  1 #include <iostream>
  2 #include <vector>
  3 #include <time.h>
  4 using namespace std;
  5 
  6 
  7 int main()
  8 {
  9 	// 랜덤 돌릴 범위의 모든 숫자를 저장한다.
 10 	vector<int> LottoNum;
 11 	for (int i = 0; i < 50; ++i)
 12 		LottoNum.push_back((i+1));
 13 
 14 	vector<int> ResultLottoNum;  // 램덤 후 결과값 담을 벡터
 15 	int NumRand = 0;
 16 
 17 	srand((unsigned)time(0));
 18 
 19 	for (int i = 0; i < 25; ++i)
 20 	{
 21 		vector<int>::iterator vcItr;
 22 
 23 		int SelectRandNum = 0;
 24 		SelectRandNum = rand()%LottoNum.size();  //랜덤
 25 
 26 		vcItr = LottoNum.begin() + SelectRandNum; // iterator에 램덤 위치 값 가르키도록 지정.
 27 
 28 		NumRand = *vcItr;   //값을 저장.
 29 		cout << NumRand << " / ";
 30 
 31 		if ((i+1)%5 == 0)
 32 			cout << endl;
 33 		ResultLottoNum.push_back(NumRand);  //최종 결과값 저장 벡터에 데이터 넣기.
 34 
 35 		LottoNum.erase(vcItr);     // 중복되지 않도록 삭제 처리.
 36 	}
 37 	return 0;
 38 }
 39 
 40 


 

 

ps  -aef

ps  -aux

 

 

a    현재 실행 중인 모든 프로세스 출력

e    모든 프로세스 정보 출력

f    Full Format 출력

x    Hidden Process 출력

 

 

netstat -nap (열려 있는 모든 포트)
#netstat -l 또는 netstat -nap | grep LISTEN (LISTEN 되는 모든 포트)
#netstat -nap | grep ESTABLISHED | wc -l ( 모든 서비스 동시 접속자 수)
#netstat -nap | grep :80 | grep ESTABLISHED | wc -l ( 웹 동시 접속자 수)
#netstat -rn  (네트웍 상태를 확인 가능)

 

 

포트를 확인 후 서버를 가동하여 포트를 사용해야 한다면 포트 개방이 필수이다.

포트 개방 방법은 다음과 같다.

#cd /etc/sysconfig/

#vi iptables

#service iptables restart

 

 

================================================

Windows XP에서 테스트

================================================

1. 명령창을 연다.

시작 -> 실행 -> cmd

 

2. netsh 명령으로 열린 포트를 확인한다.

   netsh firewall show port

 

================================================

명령 입력 결과 내용

================================================

c:\>netsh firewall show port

표준 프로필에 대한 포트 구성:
포트   프로토콜  모드    이름
-------------------------------------------------------------------
31105  TCP       사용       IncrediBuild Agent Service
31106  TCP       사용       IncrediBuild Helper #1
31107  TCP       사용       IncrediBuild Helper #2
31108  TCP       사용       IncrediBuild Helper #3
31109  TCP       사용       IncrediBuild Helper #4
1900   UDP       사용       UPnP 프레임워크의 SSDP 구성 요소
2869   TCP       사용       TCP를 통한 UPnP 프레임워크

 

 

================================================

netsh에서 사용 가능한 명령

================================================

다음 명령을 사용할 수 있습니다.

이 컨텍스트에 있는 명령:
..             - 한 컨텍스트 수준 위로 이동합니다.
?              - 명령 목록을 표시합니다.
abort          - 오프라인 모드에서 변경된 내용은 무시합니다.
add            - 항목 목록에 구성 항목을 추가합니다.
alias          - 별칭을 추가합니다.
bridge         - `netsh bridge' 컨텍스트의 변경 내용입니다.
bye            - 프로그램을 끝냅니다.
commit         - 오프라인 모드에서 변경한 내용을 적용합니다.
delete         - 항목 목록에서 구성 항목을 삭제합니다.
diag           - `netsh diag' 컨텍스트의 변경 내용입니다.
dump           - 구성 스크립트를 표시합니다.
exec           - 스크립트 파일을 실행합니다.
exit           - 프로그램을 끝냅니다.
firewall       - `netsh firewall' 컨텍스트의 변경 내용입니다.
help           - 명령 목록을 표시합니다.
interface      - `netsh interface' 컨텍스트의 변경 내용입니다.
lan            - `netsh lan' 컨텍스트의 변경 내용입니다.
nap            - `netsh nap' 컨텍스트의 변경 내용입니다.
offline        - 현재 모드를 오프라인 모드로 설정합니다.
online         - 현재 모드를 온라인 모드로 설정합니다.
popd           - 해당 스택으로부터 컨텍스트를 표시합니다.
pushd          - 현재 컨텍스트를 스택에 넣습니다.
quit           - 프로그램을 끝냅니다.
ras            - `netsh ras' 컨텍스트의 변경 내용입니다.
routing        - `netsh routing' 컨텍스트의 변경 내용입니다.
set            - 구성 설정을 업데이트합니다.
show           - 정보를 표시합니다.
unalias        - 별칭을 삭제합니다.
winsock        - `netsh winsock' 컨텍스트의 변경 내용입니다.

다음 하위 컨텍스트를 사용할 수 있습니다.
 bridge diag firewall interface lan nap ras routing winsock

명령에 대한 도움말을 보려면 명령을 입력한 다음 공백을 입력한 후
?을(를) 입력하십시오.

 

'OS > WINDOWS' 카테고리의 다른 글

[WIN7] 윈도우 웹서버(IIS) 설치  (0) 2015.04.30
[Windows] 원격 데스크톱 실행  (0) 2012.12.26
[Windows] Network IP 충돌 현상 검사  (0) 2012.12.12

==========================================================

OnInitDialog() 함수 자동 추가 방법

==========================================================

Dialog Box 클래스 추가 후 헤더 파일을 열고 Properties 창에 보면

 

여기에 OnInitDialog 부분이 있는데 추가해주면 자동으로 추가 된다.

 

※ 메뉴에서 View -> Class View를 이용하는 방법도 있으므로 참고.

 

 

==========================================================

모든게 귀찮아 수동 추가 하고 싶다면 아래의 내용을 참고

==========================================================

Dialog Box를 추가 후 클래스를 생성하게 된다. 그 생성된 헤더파일(.h)에 OnInitDialog() 함수를 생성해준다.

OnInitDialog()함수는 기본적으로 CDialog 클래스에 virtual로 존재한다.

 

1. 헤더파일(.h) 추가 내용

protected:

virtual BOOL OnInitDialog();        //생성한 클래스 헤더파일에 추가한다.

 

2. 씨피피(.cpp) 추가 내용

BOOL    classCreateName::OnDialog()

{

CDialog::OnInitDialog();

 

//TODO : Add extra initialization here

return TRUE;

}

 

모두 완료 되었으므로 초기화 해주고 싶은 내용을  [ //TODO : Add extra initialization here ] 문장 아래에 추가 한다.

대화 상자는 두 가지로 나뉜다.

  -  모달(Modal) 대화 상자

  -  모덜리스(Modeless) 대화상자

 

모달 대화 상자는 메인 흐름을 정지하고 동작하는 대화 상자이며, 모덜리스  대화 상자는 흐름을 방해하지 않고 별개로 작동하는 형태입니다.

 

1. Resource View에서 Insert Dialog를 클릭하면 Dialog Box를 생성할 수 있다.

2. 생성한 Dialog Box에서 오른쪽 버튼으로 Add Class하여 클래스를 추가해 준다.

 

3. 대화 상자를 사용하고 싶다면  클래스 이름으로 생성된 [헤더파일]을 메인 대화상자 .cpp 파일에 코드를 추가 한다.

#include "ModalDlg.h"

 

=============================================================================================

// 모달 대화 상자로 호출 하는 방법 

CModalDlg Dlg;
 INT_PTR nResult = Dlg.DoModal();

 if (nResult == IDOK) 
 {
  AfxMessageBox(_T("Clicked Button OK!"));
 }

=============================================================================================

// 모달리스 대화 상자로 호출 하는 방법

 static CModalDlg Dlg;
 if (Dlg.GetSafeHwnd() == NULL)
 {
  Dlg.Create(IDD_SUBDIG1);
 }

 Dlg.ShowWindow(SW_SHOW);

 

 

 

1. Toolbox - List Control 을 생성한다.

2. Properties - View 를 이용하여 필요한 보기 방식을 지정한다. (보통 : List 방식 사용)

3. 생성된 리스트 컨트롤에서 오른쪽 버튼을 클릭하여 [Add Variable...]을 클릭하여 변수를 만든다.

 

 

4. 데이터를 초기화 및 설정하고 싶다면 OnInitDialog() 함수에 코드를 삽입한다.

m_ctrItemList.InsertItem(0, _T("1 th Test item"));

m_ctrItemList.InsertItem(1, _T("2 th Test item"));

 

5. 컬럼 헤더를 만들어 데이터를 추가하고 싶은 경우 아래와 같이 OnInitDialog() 함수에 코드를 삽입한다.

m_ctrItemList.InsertColumn(0, _T("Count"), LVCFMT_LEFT, 150);

m_ctrItemList.InsertColumn(1, _T("Count"), LVCFMT_LEFT, 150);

m_ctrItemList.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);        //스타일을 지정하지 않으면 출력되지 않는다.

 

 m_ctrItemList.InsertItem(0, _T("1 th Test item"));            //첫번째 컬럼헤더에 값 셋팅
 m_ctrItemList.SetItemText(0, 1, _T("1 th complate"));      //두번째 컬럼헤더에 값 셋팅

  // 컬럼 헤더에 값 추가는 첫번째 컬럼이냐 두번째 컬럼이냐에 따라 다르다... 물론 두번째 컬럼헤더 값 셋팅처럼 첫번째 값 셋팅을 해주어도 무관하다.

 

 

▷ 행 전체 컬럼 선택 할 수 있도록 설정하기

    - BOOL CDialog::OnInitDialog()에 다음과 같이 내용을 추가한다.

     m_ctrCashItem.SetExtendedStyle(LVS_EX_FULLROWSELECT);

이렇게 쉬운걸 한참동안 찾아 헤매었다 ㅡㅡ;;

 

 

visual studio 2005 기준으로 테스트 되었습니다.

 

1.  Dialog Editor에서 Combo Box를 드래그 하여 생성한다.

2.  아래 그림과 같이 화살표 버튼을 누르면 리스트 표시 영역 사이즈를 조정할 수 있다.

     리스트 개수에 맞게 마우스 드래그를 이용하여 늘려 준다.

 

3. 콤보 박스 리스트 추가 및 표현(출력) 방법

    3.1  콤보 박스에 마우스를 올려 놓고 오른쪽 버튼 클릭 [Add VariAble...] 선택!

    3.2  아래와 같은 화면이 나오면 control을 생성한다.

    

 

    3.3 OnInitDialog() 함수에 초기화 하는 내용을 추가한다.

          m_comboServerList.AddString(_T("1 channel"));                   //텍스트 추가
          m_comboServerList.AddString(_T("2 channel"));

          m_comboServerList.SetCurSel(0);                                //텍스트 선택

    3.4 현재 선택된 곳이 어디인지 알고 싶다면 아래와 같이 함수 사용

         index  =  m_comboServerList.GetCurSel();        //현재 선택된 텍스트 값을 int형으로 반환

 

4.  콤보 박스 변경 시 동작 하고 싶을 때...

   - Properties 창에 보면 Control Events 를 클릭하고  동작하고 싶은 내용을 추가한다.

    - 필요한 동작 코드를 안쪽에 삽입하면 내가 원하는 동작을 취한다.

 

5. 콤보 박스 Type 설정

   - Properties 창에 보면 Type이 있다.

 

Dropdown은 Edit가 가능한 상태이다.

Drop List는 선택만 가능한 상태이다.

 

6. 콤보박스 텍스트 가져오기

  CString temp;

   this->m_comboBox.GetLBText(this->m_comboBox.GetCurSel(), temp);

   //GetCurSel()을 호출하면 현재 몇번째 지정하고 있는지에 대한 정보만 넘어온다. 주의가 필요하다.

 

  

=======================================================================================

                              콤보 박스  클래스 함수들 리스트 (펌)

=======================================================================================

▷ CComboBox::AddString - 스트링을 더함.
▷ CComboBox::CComboBox - ComboBox 오브젝트를 생성(구성).
▷ CComboBox::Clear -현재 선택을 지움.
▷ CComboBox::CompareItem - 새로운 리스트 항목의 상태적 위치를 결정.
▷ CComboBox::Copy - 현재 선택을 Copy.
▷ CComboBox::Create - CComboBox를 생성.
▷ CComboBox::Cut - 제거된 텍스트를 복사.
▷ CComboBox::DeleteItem- 항목이 Combo 박스에서 제거.
▷ CComboBox::DeleteString - 스트링을 제거.
▷ CComboBox::Dir - 리스트를 더함.
▷ CComboBox::DrawItem - 양상이 변할 때 불려짐.
▷ CComboBox::FindString - 첫 번째 스트링을 찾음.
▷ CComboBox::FindStringExact - 첫 번째 리스트 박스 스트링을 찾음.
▷ CComboBox::GetCount - 항목의 수를 회복.
▷ CComboBox::GetCurSel - 현재 선택된 항목의 색인을 찾음
▷ CComboBox::GetDroppedControlRect - 스크린 좌표를 되찾음.
▷ CComboBox::GetDroppedState - 리스트 박스가 보일지를 결정.
▷ CComboBox::GetEditSel - 시작과 끝나는 문자의 위치를 얻음.
▷ CComboBox::GetExtendedUI - 디폴트, 확장 사용자 인터페이스의 결정.
▷ CComboBox::GetItemData - 항목과 관련된 비트값을 회복.
▷ CComboBox::GetItemDataPtr - 포인터로서 관련된 비트 값을 회복.
▷ CComboBox::GetItemHeight - 리스트 항목의 높이를 회복.
▷ CComboBox::GetLBText - 리스트 박스로 부터 스트링을 얻음.
▷ CComboBox::GetLBTextLen - 스트링의 길이를 지정.
▷ CComboBox::InsertString - 스트링의 삽입.
▷ CComboBox::LimitText - 텍스트의 길이를 제한.
▷ CComboBox::MeasureItem - Combo 박스 치수를 결정하기 위해 불려짐.
▷ CComboBox::Paste - 현재 커서 위치에서 편집 제어로 삽입.
▷ CComboBox::ResetContent - 모든 항목의 제거.
▷ CComboBox::SelectString - 스트링을 선택, 복사.
▷ CComboBox::SetCurSel - 스트링을 선택.
▷ CComboBox::SetEditSel - 편집 제어에서 문자들을 선택.
▷ CComboBox::SetExtendedUI - 디폴트, 확장 사용자 인터페이스의 선택.
▷ CComboBox::SetItemData - 항목과 관련된 값을 정함.
▷ CComboBox::SetItemDataPtr - 포인터에 대한 관련된 값을 정함.
▷ CComboBox::SetItemHeight - 높이를 지정.
▷ CComboBox::ShowDropDown - 리스트 박스를 보여주거나 숨김.

 

리눅스에 설치된 MySQL 쿼리문을 이용하여 날짜, 시간을 입력하여 정수형으로 변환해주는 함수가 존재한다.

 

select  unix_timestamp('2011-05-30 12:00');

 

이 함수를 이용하면 정수 값  :  1306724400  출력된다.

 

unix_timestamp 값을 날짜, 시간으로 출력하려면 다음과 같이 진행한다.

 

  1 time_t g_itemTime = 1306724400;
  2 struct tm * localtt;
  3
  4 localtt = localtime(&g_itemTime);
  5
  6 cout << localtt->tm_year + 1900 << endl;
  7 cout << localtt->tm_mon + 1 << endl;

 

결과 값을 출력해 봤더니 제대로 나온다... ^^*

 

 

====================================================================================================

▷ 시간 변환시 주의 사항

  struct tm* stTime = localtime(&server.m_time);

  : 포인터로 서버의 시간을 바로 넘기는건 주의가 필요하다.

     왜냐하면 시간의 대한 조작을 하는 경우 시간이 꼬여 잘못된 서버 동작을 일으킬 수 있기 때문이다.

 

비트 연산자는 주로 메모리를 효율적으로 관리하거나 서버와 클라이언트 간의 전송하는 패킷을 효율적으로 주고 받아야 하는 경우 고민해볼 수 있다...

 

C/C++에서 가장 기초인 자료형에 대해 배우게 되는데... 1byte 부터 8byte까지 다양하게 사용이 가능하다...

cout << sizeof(bool); 명령으로 살펴보면 bool 역시 1byte임을 알 수 있다. 게임의 경우 장비에 대한 착용 유무를 확인 한다고 하면 대략 기존 8개 정도(머리, 상의, 하의, 신발, 장갑, 귀걸이 2개 , 목걸이 등등)로 나뉜다...

그렇다면 이 8개를 1byte씩 계산하면 대략 8byte를 사용하지만 4byte int형으로 표현도 가능하다.

우리가 비트의 대한 개념을 배웠다면 숫자 표현이 4byte는 32bit 표현 가능하다.

int형 4byte = 32 bit이므로 비트 표현은 32개 표현 가능..

 

// Bit 단위로 대입
unsigned int  EquipItem = 0;
EquipItem |= 1;
EquipItem |= 4;

// 아이템 존재 유무 확인
for (int i=0; i<32; ++i)
{
	if (EquipItem & (1 << i))
		cout << i << endl;
}


===============================================================================================

만약 bool 자료형을 배열로 만들어 사용한다면이라는 생각을 해보게 되었다..

bool EquipItem[8] = {false, };

cout << sizeof(EquipItem) << endl;

사이즈가 궁금해서 일단 출력해 봤더니 8byte가 나온다...

 

약간의 계산적인 부분이 비트 연산할 때 복잡할거라 생각했지만 이해하고 나니 훨씬 간편하다...

 

어떤 상황이냐에 따라 코드가 달라질 것이다... 기초는 역시 중요한 것 같다...

기초를 튼튼히 하면 할수록 많은 것들이 보인다...

경력 3년이 될 때까지는 계속 머리속에 기초는 외워야겠다는 생각을 해본다...

 

 


#vi  /etc/inittab

===================================================================================================

#
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:

===================================================================================================
친절하게 숫자에 대한 도움말이 있으므로 숫자를 참고하여 변경해주면 된다.
처음 설치한 경우  x-windows로 실행되는데 console 창으로 부팅을 원하는 경우에 여기에서 세팅을 변경해주면 된다.

'OS > LINUX' 카테고리의 다른 글

Linux - ps 프로세스 확인 명령  (0) 2012.08.28
Linux - netstat 사용법 (포트 확인)  (0) 2012.08.22
Linux - 네트워크 세팅하기  (0) 2012.02.27
Linux - tar 압축 프로그램  (0) 2011.12.22
Linux - RAID란?  (0) 2011.11.01
가장 간편하게 한다면 아래 명령을 이용하면 GUI로 간편하게 설정 가능하다.

# setup

만약 SETUP 화면이 안나올 때를 대비하여 다음과 같이 정리해본다.

-- 네트워크 카드 관련 설정 (IP, NETMASK 등등)
#vi  /etc/sysconfig/network-scripts/ifcfg-eth0

-- GATEWAY, HOSTNAME(컴퓨터 이름) 설정
#vi /etc/sysconfig/network

-- DNS 정보 입력
#vi /etc/resolv.conf


network를 설정하고 다시 시작하려면 다음과 같은 명령을 내리면 된다.

#service network restart


실행 중이 아니라면 시작을 해주어야 하는 경우에는 아래의 경로로 가보면 실행 파일이 존재한다.

#cd  /etc/init.d

'OS > LINUX' 카테고리의 다른 글

Linux - netstat 사용법 (포트 확인)  (0) 2012.08.22
Linux - 부팅 화면 변경하기  (0) 2012.02.27
Linux - tar 압축 프로그램  (0) 2011.12.22
Linux - RAID란?  (0) 2011.11.01
Linux - 시간 변경 명령어  (0) 2011.10.21

MySQL 로그 파일을 남기려면 다음과 같이 하면 된다.

# vi  /etc/my.cnf

log-bin=mysql-bin             # 한줄 추가하면 BinLog파일이 기록된다.


위의 내용을 저장하고 빠져 나온다음엔 MySQL을 재시작 해주어야 한다.

#service  mysqld restart

=======================================================================
BinLog 파일을 vi editer로 보면 깨지는 부분도 있어 보기 힘들다...ㅡㅡ;;

1. 먼저 BinLog파일을 텍스트로 변환한다.

#mysqlbinlog  [log 파일명]  >>  [파일명].sql


2. 파일이 너무 거대한 경우엔 사이즈에 맞게 나누는 명령어도 있다.

#split  -b  100000  [파일명].sql  [생성될 파일 경로]
=======================================================================

'Databases > MYSQL' 카테고리의 다른 글

mysql - start / stop / restart  (0) 2013.01.03
mysql - 인덱스 정보 정리  (2) 2012.10.05
mysql - Replication (Master/Slave 구조) 설정  (0) 2012.02.23
mysql - my.cnf 설정할 때 참고  (0) 2012.02.23
mysql - HeidiSQL Tool 소개  (0) 2012.01.20

1. 테스트에 사용된 소프트웨어 사양
   - CentOS 5.6
   - MySQL 5.0.xx

2. 사전 준비 및 주의 사항
   - master DB에 데이터가 존재하는 경우에는 Write(insert,update,delete 등) 동작을 하지 않는 상태에서 진행한다.

   2.1 계정생성 - Master DB
 # mysql -u root -p
Enter password: [암호 입력]

mysql> grant replication slave on *.* to
      -> 'user_name'@'user_host'  identified by 'user_password';

mysql> flush privileges;
 - 간단하게 설명하자면 replication slave 형태의 계정을 생성해주고 DB에 적용한다.

   2.2  기존 데이터 백업 - Master DB
mysql> flush tables with read lock;                #DB Write를 하지 않는다면 하지 않아도 된다.

#mysqldump -uroot -p [DB명] > xxxxxx.sql
# 백업(dump)를 했다면 Slave DB로 이동시켜 준다.

mysql> unlock tables;
 - Write 기능을 하지 못하도록 방어 후 dump한다라는 내용이다.

   2.3 데이터 적용 - Slave DB
#mysql -uroot -p < xxxxxx.sql 

* Master와 Slave DB가 모두 일치하다면 이제 cnf설정 단계로 넘어간다.
* Master와 Slave DB는 Replication이 다 끝날 때까지 Write(insert, update, delete)기능은 사용하지 않기를 바란다.


3. my.cnf 설정하기
   3.1  Master DB 설정
[mysqld]
log-bin=mysql-bin
server-id=1                                            #1~(2^32)-1 내의 숫자 중 아무거나 설정 가능.
binlog_do_db=  [Replication DB 명]          #여러 개의 DB인 경우 계속 추가하면 된다.

   3.2  Slave DB 설정
 [mysqld]
log-bin=mysql-bin
log-slave-update                                    #로그 업데이트

server-id=2                                            #1~(2^32)-1 내의 숫자 중 아무거나 설정 가능.
master-host = 127.0.0.1                            #마스터 서버의 IP
master-port = 3306                                  # 마스터 mysql 포트 번호
master-user = foxlime                              #마스터에서 만들어준 접속 계정명
master-password = xxxxxx                       #계정 비밀번호
master-connect-retry = 60
replicate-do-db = [Replication DB 명]       #master DB 설정에 입력해준 binlog_do_db 이름과 일치하게 입력
* Master와 Slave DB를 재시작 해준다. (재시작 명령 : service mysqld restart)


4. 정보 확인 및 정보 입력하기
   4.1  Master DB
mysql> show master status;
+------------------+----------+------------------------+------------------+
| File                     | Position   | Binlog_Do_DB               | Binlog_Ignore_DB |
+------------------+----------+------------------------+------------------+
| mysql-bin.000001  |       90     | TestData                       |                           |
+------------------+----------+------------------------+------------------+
1 row in set (0.00 sec)

File = MASTER_LOG_FILE
Position = MASTER_LOG_POS

   4.2  Slave DB
mysql> stop slave;

mysql> CHANGE MASTER TO
      -> MASTER_LOG_FILE= File 컬럼,
      -> MASTER_LOG_POS= Position 컬럼;

   4.3  최종 정보 확인
  - 정보를 확인은 필수이다. 잘 적용이 되었는지 이상없이 동작이 가능한지 여부를 알 수 있기 때문이다.
 * Master에서 명령
 mysql> show master status;

* Slave에서 명령
 mysql> show slave status\G;             # 보기 좋게 정리해서 나온다.

 mysql> start slave;
##################warning 또는 error만 없다면 정상 동작한다는 의미이다.

 mysql> show slave status\G;
      - 정보 확인 중에 [Slave_IO_State: Waiting for master to send event]를 제외한 문구는 오류이다.
        * 주의 : master에서 port또는 IP개방을 해주지 않는 경우가 종종 발생하므로 미리 확인이 필요하다.

 

'Databases > MYSQL' 카테고리의 다른 글

mysql - 인덱스 정보 정리  (2) 2012.10.05
mysql - BinLog 파일 Text 변환  (0) 2012.02.27
mysql - my.cnf 설정할 때 참고  (0) 2012.02.23
mysql - HeidiSQL Tool 소개  (0) 2012.01.20
mysql - Replication 정의  (0) 2012.01.16
1. my.cnf 설정할 때 참고할 수 있는 샘플 파일 위치

/usr/share/mysql 폴더에 mysql과 관련된 cnf 샘플 파일을 제공하고 있다.
샘플 파일들을 잘 활용하면 DB의 성능 향상에 도움이 된다.

* 리스트 첨부 *
-rw-r--r-- 1 root root   4925 2008-03-04 12:41 my-huge.cnf
-rw-r--r-- 1 root root  20923 2008-03-04 12:41 my-innodb-heavy-4G.cnf
-rw-r--r-- 1 root root   4901 2008-03-04 12:41 my-large.cnf
-rw-r--r-- 1 root root   4908 2008-03-04 12:41 my-medium.cnf
-rw-r--r-- 1 root root   2478 2008-03-04 12:41 my-small.cnf

 1-2. 최근 사용했던 내용 정리
   max_allowed_packet = 1000M      # 용량 큰 dump 파일을 밀어 넣을 때 오류가 생긴다면 이 수치를 높여주면 된다.
   log_bin=mysql-bin                      # mysql log 파일을 남길 때 사용한다. (/var/lib/mysql/파일명.0000001 생성됨)
   max_binlog_size=100M               # mysql log 파일 한개당 용량이며 용량이 다 되면 새로운 파일을 생성한다.
   expire_logs_days=7                    # mysql log 파일 보존 기간이다. (로그가 중요하다면 설정을 피한다)
   

> my.cnf 파일을 수정했다면 다음과 같은 명령어를 이용하여 mysql을 다시 시작해줘야 한다.
   service mysqld restart

'Databases > MYSQL' 카테고리의 다른 글

mysql - BinLog 파일 Text 변환  (0) 2012.02.27
mysql - Replication (Master/Slave 구조) 설정  (0) 2012.02.23
mysql - HeidiSQL Tool 소개  (0) 2012.01.20
mysql - Replication 정의  (0) 2012.01.16
mysql - 덤프하기 (mysqldump)  (0) 2011.10.07

+ Recent posts