2011. 8. 4. 00:27

▶ 명령어 에러 메시지의 여러 유형

▷ 오타 등 명령어를 잘못 입력 또는 지정된 디렉토리에 존재하지 않는 경우(PATH 변수)

-bash: sillycommand: command not found

또는 잘못된 명령이지만 비슷한 명령이 존재 하는 경우.

No command 'xxx' found, did you mean:

Command 'xdx' from package 'xdx' (universe)

Command 'x2x' from package 'x2x' (universe)

Command 'xxd' from package 'vim-common' (main)

xxx: command not found

▷ 해당 명령어가 root 계정에만 사용 가능한 경우(sudo 또는 그와 비슷한 방법을 사용)

- 해당 프로그램마다 각종 에러 메시지가 틀림.

▷ 명령어 또는 명령어가 포함된 우분투 패키지가 설치되어 있지 않는 경우.

The Program 'nmap' is currently not installed. You can install it by typing:

sudo apt-get install nmap

 

 

▶ 설치된 명령어를 찾기 위한 일반적인 리눅스 명령어들:

명령어와 출력결과의 예

설명

$ echo $PATH

/usr/local/bin:/usr/sbin:/usr/bin:..[생량]…

현재 path 변수의 내용을 보여줌.

$ which mount

/bin/mount

PATH에서 첫 번째로 검색된 mount 명령어를 보여줌.

$ find /usr -name umount

/usr/lib/klibc/bin/umount

/usr 파일 시스템에서 umount 문자열을 가진 파일

또는 디렉토리를 찾는다.

$ whereis mount

mount: /bin/mount /usr/share/man/man8/mount.8.gz

mount 명령어에 대한 첫 번째 실행 파일과

맨 페이지를 보여준다.

$ locate mount

/usr/bin/fdmountd

locate 명령어를 사용하여(설정되어 있는) 디렉토리

목록에서 mount를 검색.

$ apropos umount

umount(8) - unmount file systems

맨 페이지 설명에서 입력된 키워드인 umount를

찾는다.

$ man 8 umount

Reformatting umount(8), please wait…

맨 페이지 섹션 8에 있는 umount 맨 페이지를 본다.

(q를 입력해 종료)

 

▶설치된 명령어를 찾기 위한 우분투 . 데비안 기반의 명령어들:

명령어와 출력결과의 예

설명

$ apt-cache search umount

gnome-mount - wrapper for (un)mounting and ejecting…

패키지 캐시 목록에서 umount에 대한 명령어 또는

설명이 포함된 패키지를 찾는다.

$ dpkg-query -S umount

initscripts: /etc/init.d/umountnfs.sh

설치된 패키지에서 파일명에 umount를 포함하고

있는 패키지를 보여준다.

$ dpkg -L initscripts

/bin/mountpoint

패키지에 포함된 파일 목록을 보여준다.

$ sudo apt-get update

password:

Get:1 http://security.ubuntu.com feisty-security Relase…

패키지 캐시 목록을 업데이트 한다.

Posted by devanix
2011. 8. 3. 22:21

♧ 우분투는 데비안 GNU/리눅스(www.debian.org)에 기반한 운영체제. 1990년대 초부터

시작되어 이미 성숙단계에 들어선 데비안은 안정성과 보안성 측면에서 선도적인 리눅스

배포판으로 여겨지고 있다. 자유 소프트웨어의 기준을 엄격하게 준수하며 기여함.

 

▶ 배포판

Xubuntu

우분투를 기반으로 한 Xface 데스크탑 환경의 시스템

Kubuntu

우분투를 기반으로 한 KDE 데스크탑 환경의 시스템.

Lubuntu

우분투를 기반으로 한 LXDE 데스크탑 환경의 가벼운 시스템.

Edubuntu

교육적 활용에 초점을 둔 우분투 버전.

Knoppix

데비안을 기반으로 한 KDE 데스크탑 지향의 라이브 CD

Kanotix

데비안 기반의 라이브 CD

Damn Small Linux

Knoppix 기반의 작은 라이브 CD(50 MB)

Mepis

우분투와 데비안에 기반한 데스크탑 라이브 CD

 

▶ 우분투와 다른 리눅스 배포판 비교

우분투 시스템과 레드햇 엔터프라이즈 리눅스 또는 페도라 시스템에 커맨드 라인으로 로그인했다면

아주 약간의 차이만 느껴질 것이다. 두 시스템은 모두 공통의 디렉토리들과 유틸리티를 가지고 있고

기능 측면에서는 근본적으로 동일하다.

▷ 차이점 :

- 설치프로그램, 설치할 개별 패키지 선택, 설정 옵션등.

- 소프트웨어 관리툴 (데비안 기반 : APT(Advenced Package Tool) 계열 유틸)

- 룩앤필(Look-and-feel)관점 (초기화, 로그인 화면, 기본 데스크탑, 바탕화면, 아이콘 모음등..)

- 우분투의 경우 root계정이 신중하게 사용되도록 제한(su 대신 sudo 권장)

 

▶ 우분투 리소스 찾기

ubuntuforums.org

웹 포럼이자 소셜 네트워크인 이곳은 다양한 우분투 사용자와 그들을

지원하는 인력을 위한 커뮤니티 공간.

www.ubuntu.com/support

공식적으로 우분투를 지원하고 있는 Canonical사로부터 유료 지원을

제공받을 수 있는곳. 만약 포럼을 검색하거나 답변을 기다릴 시간이

없거나 보다 신속한 지원을 원하는 경우, 한 달에 약 20달러의 비용

으로Canonical사로부터 전화, 이메일 그리고 웹을 통한 지원을 받을

수 있다. 또한 기업과 기업 사용자를 위한 우분투 트레이닝도 제공.

help.ubuntu.com

각 버전에 대한 공식적인 최신 온라인 문서를 제공.

새로운 우분투 버전이 릴리즈된다면 해당 버전에 추가된 새로운

기능이나 달라진 내용이 무엇인지 이곳에서 찾을 수 있다.

screencasts.ubuntu.com

프린터 설정에서부터 삼바 파일 공유, 우분투 시스템을 최상의 상태로

유지할 수 있는 업데이트 작업까지 우분투와 관련되 다양한 사용법이

기록된 데스크탑 세션을 볼 수 있다. 이 사이트에 기여하고 싶은

우분투 사용자라면 Ubuntu Screencast Launchpad Team에

가입을 권한다.

lists.ubuntu.com/mailman/

listinfo/ubuntu-users

우분투 사용자들과 이메일을 통해 토론하고 함께 문제를 해결하고자

한다면, 우분투 사용자 메일링리스트에 가입. 우분투에 관한 것이라면

무엇이든 제안할 수 있다. 축적된 과거 자료를 보고자 한다면

https://lists.ubuntu.com/archives/ubuntu-users 참조.

wiki.ubuntu.com/IRCResourcePage

IRC 무료 채팅을 통해서 실시간으로 도움을 받고 싶다면 우분투 IRC

리소스 페이지를 방문한다. IRC 가이드라인, 클라이언트 프로그램,

채팅 서버 등에 대한 정보를 제공하고 있다. IRC를 통한 채팅 경험이

없다면 Ubuntu Code of Conduct page

(www.ubuntulinux.org/community/conduct/) 도움을 구한다.

www.linux-usb.org

리눅스와 호환된다고 알려진 USB 디바이스에 대한 정보를 공유.

이곳을 통해 USB 디바이스의 제조회사, 모델, 이름을 검색해볼 수

있으며 리눅스 환경에서의 사용 방법 등에 관한 정보도 얻을 수 있음.

www.linuxfoundation.org

리눅스 성장과 발전을 위한 비영리 단체

www.sane-project.org

SANE(Sacnner Access Now Easy)는 리눅스 환경에서의 문서

스캐닝에 초점을 맞춘 사이트. 만약 리눅스에서 스캐너 또는

스캐닝 기능이 포함된 복합기를 사용하고자 한다면, 이곳에서

리눅스를 적절히 지원 하고 있는 제조사를 찾아볼 수 있다.

tldp.org

리눅스 문서화 프로젝트는 리눅스 대한 각종 안내서, 하우투

문서 그리고 FAQ 등의 온라인 문서 보관소.

 

▶ 우분투 소프트웨어

우분투 패키지 웹사이트 : http://packages.ubuntu.com

시냅틱(Synaptic), APT, 그리고 업데이트 관리자 같은 표준툴들은 대부분 동일한 소프트웨어 설치 방법을 사용.

 

공식적으로 우분투용 패키지를 제공하지 않는 소프트웨어나 실험적인 소프트웨어가 필요한 경우라도,

대부분의 패키지들은 MD5sum 또는 GPG 키를 제공하기 때문에 다운로드받은 소프트웨어의 위조 여부

를 검증해볼 수 있다 - http://www.debian-administration.org/articles/375

(비표준 소프트웨어 사용과 관련해서 호환성 문제가 발생하거나 업그레이드 작업의 문제가 발생할 수 있음.)

▷ 공식적인 패키지 이외의 소프트웨어들을 살표볼 수 있는 웹사이트들.

www.happypenguin.org

리눅스 게임 창고. (다양한 리눅스 환경의 게임들)

www.freshmeat.net

유닉스와 크로스플랫폼 소프트웨어, 테마, 액세서리 프로그램, 팜용

소프트웨어까지 방대한 양의 소프트웨어 제공.

www.sourceforge.net

오픈소스 개발자들이 함께 새로운 프로젝트를 시작하고자 한다면

도움을 받을 수 있다. 프로젝트 개설하면 프로젝트 관리 툴, 리소스,

사용자와의 의사소통 및 코드 관리를 위한 툴뿐 아니라 프로젝트를

위한 웹 공간까지 사용할 수 있다.

www.linux.org/apps

Linux.org는 리눅스 운동에 대한 정보를 제공하기 위해 1994년부터

운영되어 온 웹사이트. 모든 리눅스에 대한 정보의 보고로서 성장.

특히 애플리케이션 섹션은 리눅스 시스템에서 사용 가능한 광범위하고

다양한 소프트웨어를 안내할 것이다.

Posted by devanix
2011. 8. 3. 18:31


UBUNTULINUXTOOLBOX
카테고리 컴퓨터/IT > OS
지은이 크리스토퍼 니거스 (지앤선, 2009년)
상세보기
  
[ 원서 ] - E-Book [ View ]
UbuntuLinuxToolbox1000+CommandsforUbuntuandDebianPowerUsers
카테고리 과학/기술>컴퓨터 > OS/운영체제
지은이 Negus, Christopher/Caen, Francois/ (JohnWiley&SonsInc, 2007년)
상세보기


Book Description:

이 책에는 Ubuntu를 기반으로 하는 리눅스 배포판을 보다 더 유용하게 사용할 수 있는 방법(명령어)

이 소개되어 있다. 파일시스템 제어부터 멀티미디어 파일조작에 이르기까지 리눅스 시스템 관리에 필요한

1,000여개의 커맨드라인 명령어를 망라하고 있으므로 이 책을 통해 리눅스 시스템에 대한 이해를 넓힐 수 있다.

또한 항상 옆에 두고 필요할 때마다 바로바로 참조할 수 있도록 핵심내용을 중심으로 구성되어 있다.

 

Table of Contents:

역자 서문
Chapter 1 : 우분투 리눅스의 시작 
Chapter 2 : 우분투 설치와 소프트웨어 추가 
Chapter 3 : 리눅스 쉘 사용하기 
Chapter 4 : 파일 작업하기 
Chapter 5 : 텍스트 다루기 
Chapter 6 : 멀티미디어 즐기기 
Chapter 7 : 리눅스 파일시스템 관리하기 
Chapter 8 : 백업과 외장형 미디어기기 
Chapter 9 : 실행중인 프로세스 체크하고 관리하기 
Chapter 10 : 시스템 관리 
Chapter 11 : 네트워크 연결 관리하기 
Chapter 12 : 네트워크 리소스에 액세스하기 
Chapter 13 : 원격 시스템 관리하기 
Chapter 14 : 락킹 다운 보안 

Appendix A : Vim(vi) 에디터 사용하기 
Appendix B : 쉘 특수 문자와 변수 
Appendix C : /proc에서 정보얻기 

Posted by devanix
2011. 7. 29. 15:34

[ 비트 설정 ]

▶ 특정 비트를 1로 설정 : 1과 |(or)연산.

▷ 5번 비트를 1로 설정>

  

0101_0101

OR( | )

0010_0000

  

0111_0101

 

위의 연산을 코드화 : a |= 0x00100000;

▷ 위의 0x001_0000은 0x1(0x000_0001)을 5번 쉬프트한 값과 같다.

a |= 0x1 << 5;

   

▷ 5,3,2번 비트를 1로 설정>

  

0101_0101

OR( | )

0010_1100

  

0111_1101

 

위의 연산을 코드화 : a |= (0x1<<5)+(0x1<<3)+(0x1<<2);

▷ 3,2번 비트는 연속된 비트이기 때문에 0x3으로 묶어줄 수 있다.

a |= (0x1<<5)+(0x3<<2);

   

[ 비트 클리어 ]

▶ 특정 비트 클리어 : 0과 &연산.

▷ 1을 원하는 위치로 쉬프트하고 그 값에 대해 ~(NOT)연산을 해서 0으로 만듬.

(0x0000, 0x0도 모두 0이기 때문에 0으로 자릿수를 표현할 수 없음)

0x1 << 5

0x0010_0000

~(0x1<<5)

0x1101_1111

▷ 2번 비트를 0으로 클리어>

  

0101_0101

AND(&)

1111_1011

  

0101_0001

위의 연산 코드화 : a &= ~(0x1<<2);

   

▷ 5,3,2번 비트 클리어>

  

0101_0101

AND(&)

1101_0011

  

0101_0001

위의 연산 코드화 : a &= ~((0x1<<5)+(0x3<<2));

   

[ 비트 반전 ]

▶ 특정 비트 반전 : 1과 ^연산. ( ^연산은 두 피연산자가 같으면 0, 다르면 1로 설정)

▷ 5번 비트 반전 >

  

1111_0101

XOR(^)

0010_0000

  

1101_0101

위의 연산 코드화 : a ^= 0x1<<5

   

▷ 5,3,2번 비트 반전 >

  

1111_0101

XOR(^)

0010_1100

  

1101_1001

위의 연산 코드화 : a ^= (0x1<<5)+(0x3<<2);

   

[ 비트 검사 ]

▶ 특정 비트가 0인지 1인지 검사.

▷ 5번째 비트가 0인지 1인지 검사 : a & (0x1 << 5)

   

[ 비트 추출 ]

▶ 특정 비트만 추출.

▷ [6:4] 비트만 추출하고 싶다면 : (a>>4) & 0x7

   

   

[ bit_macro.h ]

/* 한 비트 클리어 */
#define clear_bit(data, loc)    ((data) &= ~(0x1 << (loc)))
/* 연속된 여러 비트 클리어 */
#define clear_bits(data, area, loc)     ((data) &= ~((area) << (loc)))
 
/* 한 비트 설정 */
#define set_bit(data, loc)      ((data) |= (0x1 << (loc)))
/* 연속된 여러 비트 설정 */
#define set_bits(data, area, loc)  ((data) |= ((area) << (loc)))
 
/* 한 비트 반전 */
#define invert_bit(data, loc)   ((data) ^= (0x1 << (loc)))
/* 연속된 여러 비트 반전 */
#define invert_bits(data, area, loc)    ((data) ^= ((area) << (loc)))
 
/* 비트 검사 */
#define check_bit(data, loc)    ((data) & (0x1 << (loc)))
 
/* 비트 추출 */
#define extract_bits(data, area, loc)   (((data) >> (loc)) & (area))

   

 

[ bit_test.c ]

#include <stdio.h>
#include "bit_macro.h"

void bitdisp(int c) {
    int i;

    for (i=7; i>=0; i--)
        printf("%1d", check_bit(c, i)? 1:0);

    putchar('\n');
}

int main(void) {
    unsigned char a = 0xf0;     // 11110000(₂)
    unsigned char b;

    printf("a 2진수로 출력 : "); bitdisp(a);
    puts("------------------------------------");
clear_bit(a, 5); /* 5번 비트 클리어 */ printf("5번 비트 클리어 : "); bitdisp(a); clear_bits(a, 0x7, 3); /* 5,4,3번의 연속 3비트 클리어 */ printf("5,4,3번 비트 클리어 : "); bitdisp(a); putchar('\n'); set_bit(a, 5); /* 5번 비트 설정 */ printf("5번 비트 설정 : "); bitdisp(a); set_bits(a, 0x7, 3); /* 5,4,3번 연속 비트 설정 */ printf("5,4,3번 비트 설정 : "); bitdisp(a); putchar('\n'); invert_bit(a, 5); /* 5번 비트 반전 */ printf("5번 비트 반전 : "); bitdisp(a); invert_bits(a, 0x7, 3); /* 5,4,3번 연속 비트 반전 */ printf("5,4,3번 비트 반전 : "); bitdisp(a); putchar('\n'); b = extract_bits(a, 0x7, 4); /* 6,5,4번 비트를 추출하여 b에 대입 */ printf("6,5,4번 비트 추출 : "); bitdisp(b); return 0; }

   

'Programming > C' 카테고리의 다른 글

The GNU C Library Reference Manual  (0) 2011.09.08
The C Library Reference Guide  (0) 2011.09.08
다시 체계적으로 배우는 C언어 포인터  (0) 2011.07.07
연산자 우선순위  (0) 2010.05.05
매크로  (0) 2010.05.05
Posted by devanix
2011. 7. 12. 22:02

Null로 종결된 문자열 query 에 의해 가리키는 SQL 명령문을 실행한다.

mysql_query() - SQL 쿼리 실행

형태

int mysql_query(MYSQL *mysql, const char *query)

리턴값

성공 : 0(zero)

에러 : Non-Zero.

 

length 바이트 길이의 문자열인 query에 의해 가리키는 SQL 쿼리를 실행한다. 

mysql_real_query() - SQL 쿼리 실행 (바이너리 데이터를 포함한 쿼리)

형태

int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)

리턴값

성공 : 0(zero)

에러 : Non-Zero.

 

▷ 일반적으로, 문자열은 하나의 싱글 SQL 명령문으로 구성된다.

그리고 사용자는 명령문에 종료 세미콜론 (';') 또는 \g를 명령문에 추가하지 말아야 한다. 

다중 명령문 실행이 가능했다면, 문자열은 세미콜론들로 구분된 여러 개의 명령문으로 구성될 수 있다.

 

mysql_query() 함수는 바이너리 데이터를 포함하는 쿼리들의 경우 사용될 수 없다.

바이너리 데이터에는 '\0' 문자가 포함될 수 있는데, mysql_query() 함수는 쿼리 문자열의 끝으로 해석될 수 있다.

바이너리 데이터를 포함한 쿼리의 경우 mysql_query() 함수보다 mysql_real_query() 함수를 사용. 

▷ 쿼리 문자열에서 strlen() 을 호출하지 않기 때문에, mysql_real_query() 함수가 mysql_query() 함수보다 더 빠름.

 

▷ 쿼리 명령문이 결과 셋을 리턴하는지 알고 싶다면, mysql_field_count()를 사용해서 검사하도록 한다.

 

 

[ 에러 ]

CR_COMMANDS_OUT_OF_SYNC

명령문이 불규칙한 순서로 실행됨

CR_SERVER_GONE_ERROR

MySQL 서버가 중단됨.

CR_SERVER_LOST

쿼리 동안 서버로의 연결이 끊김.

CR_UNKNOWN_ERROR

알 수 없는 에러 발생.

 

Posted by devanix
2011. 7. 12. 06:16

▷ 모든 API함수에 대한 오류는 에러 코드를 되돌려 줌으로서 나타나며,

세부 내용은 접속 처리 구조체를 통해 알려준다.

오류 메시지를 처리할 때 다음과 같인 두 개의 루틴만 알고 있으면 된다.

 

mysql_errno() - 가장 최근에 실행된 MySQL API 함수의 에러 코드를 리턴.

형태

unsigned int mysql_errno(MYSQL *mysql)

인수

mysql: MYSQL* 핸들

반환값

에러가 있을 경우: 마지막으로 호출된 API함수(mysql()_xxx)를 위한 에러 코드.

에러가 없을 경우: 0(zero)

 

mysql_error() - 가장 최근에 실행된 MySQL API 함수의 에러 메시지 문자열 리턴.

형태

const char *mysql_errno(MYSQL *mysql)

인수

mysql: MYSQL* 핸들

반환값

에러가 있을 경우: 마지막으로 호출된 API함수(mysql()_xxx)를 위한 에러 메시지 문자열.

에러가 없을 경우: 빈 문자열.

 

mysql_error()함수의 메시지는 내부의 정적 공간이므로,

오류 메시지를 저장하려면 메시지를 다른 위치에 복사하면 된다.

 

mysql_errno() 함수에 의해 리턴된 MySQL-지정 에러 숫자들은

mysql_sqlstate() 함수에 의해 리턴된 SQLSTATE 값과 다르다.

예를 들어, mysql 클라이언트 프로그램은 다음 포맷을 사용 중인 에러들을 보여준다.

여기서 1146 mysql_errno() 함수 값이고, '42S02' mysql_sqlstate() 함수 값과 일치한다:

shell> SELECT * FROM no_such_table;

ERROR 1146 (42S02): Table 'test.no_such_table' doesn't exist

 

 

주의:

mysql_fetch_row() 같은 몇몇 함수들은 성공하면 mysql_errno()를 설정하지 않음.

(경험적으로 서버에 정보를 요구하는 함수는, 성공했을 경우에 mysql_errno()를 재설정)

 

에러 메시지가 기술된 헤더 파일:

클라이언트 에러 메시지 숫자: MySQL errmsg.h 헤더 파일에 기술.

서버 에러 메시지 숫자 : mysqld_error.h 헤더 파일에 기술.

 

예제:

MYSQL mysql;

mysql_init(&mysql);

mysql_option(&mysql, MYSQL_READ_DEFAULT_GROUP, "your_prog_name");

if ( ! mysql_real_connect(&mysql, "host", "user", "passwd", "database", 0, NULL, 0)) {

■■■■fprintf(stderr, "Connection error %d: %s\n", mysql_errno(&mysql), mysql_error(&mysql));

}

 

Posted by devanix
2011. 7. 12. 02:59

mysql_options() - 별도 연결 옵션을 설정하는데 사용될 수 있으며, 연결 시 작동에 영향을 미칠 수 있다.

형태

int mysql_options(MYSQL *mysql, enum mysql_option option, const void *argument)

인수

mysql: MYSQL* 핸들

option: 사용자가 설정을 원하는 옵션

argument: 옵션 값. (옵션이 정수라면, 포인터로 가리킨다)

리턴값

성공: 0(Zero). 

실패: 알 수 없는 옵션을 사용하면, Non-zero.

 

mysql_init() 함수 후에 그리고 mysql_connect() 또는 mysql_real_connect()함수 전에 호출되어야 한다.

mysql_init();

mysql_options() ß mysql_init()와 mysql_connect() 사이에 필요한 횟수만큼 이 루틴을 호출 할 수 있다.

mysql_options()

mysql_connect();

   

▶ 일반적으로 자주 사용하는 옵션 몇 가지:

enum 옵션

변수 타입

기능

MYSQL_INIT_COMMAND

const char *

접속한 시간을 매 시간 보내는 명령

MYSQL_OPT_COMPRESS

None (use NULL)

압축된 클라이언트/서버 프로토콜을 사용.

MYSQL_OPT_CONNECT_TIMEOUT

unsigned int *

접속의 타임 아웃 시간(초 단위).

MYSQL_READ_DEFAULT_FILE

char *

my.cnf 로부터 대신에 네임드 옵션 파일에서 옵션을 읽음

MYSQL_READ_DEFAULT_GROUP

char *

my.cnf의 네임드 그룹 또는 MYSQL_READ_DEFAULT_FILE

로 지정한 파일에서 옵션을 읽음

▷ MYSQL_READ_DEFAULT_FILE 또는 MYSQL_READ_DEFAULT_GROUP 을 사용하면, 

client 그룹은 항상 읽힌다는 것을 명심하라.

 

▶ 옵션 파일에서 지정된 그룹은 다음 옵션들을 포함할 수 있다: 

옵션

설명

connect-timeout

수 초 내에 타임아웃 연결. 

리눅스에서 이 타임아웃은 서버로부터 처음 응답을 기다리는데 사용된다.

compress

간단한 클라이언트/서버 프로토콜을 사용.

database

연결 명령문에 데이터베이스가 지정되어 있지 않았다면, 

이 데이터베이스로 연결.

debug

디버그 옵션.

disable-local-infile

LOAD DATA LOCAL사용이 불가능

host

디폴트 호스트이름.

init-command

MySQL 서버로 연결 시 실행하기 위한 명령. 재연결 시 자동으로재실행됨.

interactive-timeout

CLIENT_INTERACTIVE 를 mysql_real_connect()함수에 

지정하는 것과 같다.  22.2.3.51, "mysql_real_connect()"장 참조

local-infile[=(0|1)]

변수가 없거나 변수가 != 0 라면, LOAD DATA LOCAL사용이 가능하다.

max_allowed_packet

패킷 클라이언트 최대 사이즈는 서버로부터 읽을 수 있다.

multi-results

다중 명령문 실행 또는 스토어드 프로시져로부터 멀티 결과 셋허용.

multi-statements

클라이언트가 싱글 문자열(스트링/.';'로 나누어진) 

내에 다중 명령문을 보내도록 허용.

password

디폴트 패스워드.

pipe

NT 기반에서 MySQL 서버에 연결하기 위해 명명된 파이프 사용.

protocol={TCP|SOCKET|PIPE|MEMORY}

서버로 연결 시 사용하는 프로토콜.

port

디폴트 포트 넘버.

return-found-rows

UPDATE 사용시, 업데이트된 로우들 대신에 검색된 로우들을

리턴하기 위해 mysql_info()함수를 호출.

shared-memory-base-name=name

서버로 연결하기 위해 사용되는 공유 메머리 이름(디폴트는"MYSQL").

socket

디폴트 소켓 파일.

user

디폴트 사용자.

   

 

[ 예제 ]

MYSQL mysql;

unsigned int timeout = 7;

 …

mysql_init(&mysql);

mysql_options(&mysql, MYSQL_OPT_COMPRESS, 0);

mysql_options(&mysql, MYSQL_READ_DEFAULT_GROUP, "odbc");

mysql_options(&mysql, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&timeout);

if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))

{

    fprintf(stderr, "Failed to connect to database: Error: %s\n",

          mysql_error(&mysql));

} 

이 코드는 클라이언트가 압축된 클라이언트/서버 프로토콜을 사용(MYSQL_OPT_COMPRESS).

my.cnf 파일 내에서 odbc 섹션으로부터 추가적인 옵션을 읽도록 요청(MYSQL_READ_DEFAULT_GROUP).

접속 시간 초과를 7초로 설정(MYSQL_OPT_CONNECT_TIMEOUT).

 

(※ 자세한 내용은 매뉴얼 페이지 참조)

Posted by devanix
2011. 7. 11. 20:11

mysql_real_connect() - Mysql 데이터베이스 엔진으로 연결 시도.

형태 & 인수

MYSQL *mysql_real_connect(

MYSQL *mysql,           /* MYSQL 구조의 어드레스 */

const char *host,        /* 호스트 이름 또는 IP 어드레스 (default = localhost) */

const char *user,       /* MySQL Login ID (default = 현재 로그인 이름) */

const char *passwd, /* 패스워드 (default = none) */

const char *db,           /* 데이터베이스 이름 (default = none) */

unsigned int port,      /* TCP/IP 연결 포트 (use default) */

const char *unix_socket,       /* 소켓 (use default) */

unsigned long client_flag)                /* flag (none) */

리턴 값

성공 : MYSQL* 연결 핸들 (= 첫 번째 파라미터)

실패 : NULL

사용자가 유효한 MYSQL 연결 핸들 구조를 요구하는 다른 어떤 API 함수를 

실행할 수 있기 전에 성공적으로 완료되어야 한다.

 

 

client_flag 값은 대체로 0이다. 그러나 정확한 기능을 작동하기 위해 다음 플래그의 조합으로 설정될 수 있다:

플래그(Flag) 이름

플래그(Flag) 설명

CLIENT_COMPRESS

압축 프로토콜 사용.

CLIENT_FOUND_ROWS

변경된 로우의 숫자가 아니라 찾은(맞는) 로우들의 숫자를 리턴.

CLIENT_IGNORE_SPACE

함수 이름 후에 공간 허용. 모든 함수 이름을 예비의 단어로 만듦.

CLIENT_INTERACTIVE

interactive_timeout 초 허용 (wait_timeout 초대신에)

of inactivity before closing the connection. 

클라이언트 세션 wait_timeout 변수는 세션

 interactive_timeout 변수 값으로 설정.

CLIENT_LOCAL_FILES

LOAD DATA LOCAL 조정 가능.

CLIENT_MULTI_STATEMENTS

싱글 문자열 (';'로 나눠진)에서 클라이언트가 다중(멀티) 명령문을 

보내도록 서버에 전달. 만약 이 플래그가 설정되어 있지 않다면, 

멀티-명령문 실행은 불가능하다.

CLIENT_MULTI_RESULTS

클라이언트가 멀티-명령문 실행 또는 스토어드 프로시저로부터 

멀티 결과 셋을 조정할 수 있다는 것을 서버에 전달. 

CLIENT_MULTI_STATEMENTS이 설정되어 있다면, 이것은 자동적으로 설정.

CLIENT_NO_SCHEMA

db_name.tbl_name.col_name 신텍스를 허용하지 않음. 이것은 ODBC용이다.

ODBC 프로그램에곤란한 버그에 사용하는 신텍스를 사용할 경우,

parser(쿼리문 분석기)가 에러를 출력하도록 한다.

CLIENT_ODBC

원격 데이터베이스를 사용할 때 ODBC를 사용하고 있는지 확인할 수 있다.

CLIENT_SSL

SSL 사용. 이 옵션은 어플리케이션 프로그램으로 설정될 수 없다; 

이것은 내부적으로 클라이언트 라이브러리 내에 설정된다.

mysql_real_connect()함수를 호출하기 전에mysql_ssl_set()함수를 사용.

 

 

[ 에러 ]

CR_CONN_HOST_ERROR

MySQL 서버로의 연결 실패.

CR_CONNECTION_ERROR

로컬 MySQL 서버로의 연결 실패

CR_IPSOCK_ERROR

IP소켓 생성 실패.

CR_OUT_OF_MEMORY

메모리 부족.

CR_SOCKET_CREATE_ERROR

유닉스 소켓 생성 실패.

CR_UNKNOWN_HOST

호스트 이름 용 IP 어드레스 찾기 실패.

CR_NAMEDPIPEOPEN_ERROR

윈도우에서 명명된 파이프 생성 실패

CR_NAMEDPIPEWAIT_ERROR

윈도우에서 명명된 파이프 대기(wait for) 실패.

CR_NAMEDPIPESETSTATE_ERROR

윈도우에서 파이프 핸들러(조정자) 획득 실패

CR_SERVER_LOST

connect_timeout > 0 이고 서버에 연결하는데

connect_timeout 초 보다 오래 걸리면 또는 서버가

or init-command을 실행하는 동안 죽는다면 실패.

 

[ 예제 ]

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

#define def_host_name   NULL     /* host to connect to (default = localhost) */
#define def_user_name   "rick"      /* user name (default = your login name) "*/
#define def_password    "bar"        /* password (default = none) */
#define def_db_name     NULL      /* dtabases to use (default = none) */
#define def_port_num    0               /* use default port */
#define def_socket_name NULL  /* use default socket name */

MYSQL my_conn;                    /* pointer to connection handler */

int main(int argc, char *argv[]) {

    mysql_init(&my_conn);
    if ( mysql_real_connect (
        &my_conn,                 /* pointer to connection handler */
        def_host_name,       /* host to connect to */
        def_user_name,       /* user name */
        def_password,          /* password */
        def_db_name,          /* database to use */
        def_port_num,          /* port (use default) */
        def_socket_name,   /* socket (use default) */
        0)                                 /* flags (none) */
    ) {
        printf("Connection success\n");
    } else {
        fprintf(stderr, "Failed to connect to databases: Error: %s\n",
            mysql_error(&my_conn));
    }

    mysql_close(&my_conn);
    return EXIT_SUCCESS;
}

   

 (※ 자세한 내용은 매뉴얼 페이지 참조)

Posted by devanix