2011. 7. 11. 05:58

mysql_config는 MySQL 클라이언트를 컴파일링하고

그것을 MySQL로 연결하는데 필요한 유용한 정보를 제공한다.

 

mysql_config 옵션:

옵션

설명

--cflags

찾는 컴파일러 프래그들은 파일과 핵심 컴파일러 플래그들을 포함하며,

libmysqlclient 라이브러리를 컴파일 할 때 사용된 정의한다.

--include

MySQL을 찾는 컴파일러 옵션은 파일을 포함한다.

(이 옵션 대신에 일반적으로 Note --cflags 을 사용한다는 것을 명심하라.)

--libs

MySQL 클라이언트 라이브러리로 링크하기 위해 요구되는 라이브러리들과 옵션들.

--libs_r

스레드에 안전한 MySQL 클라이언트 라이브러리로 링크하기 위해 요구되는 라이브러리와 옵션.

--plugindir

플러그인 디렉토리.

--socket

MySQL 설정 시 정의된 디폴트 유닉스 소켓 파일.

--port

MySQL 설정 시 정의된 디폴트 TCP/IP 포트 넘버.

--version

MySQL 버전 숫자.

--libmysqld-libs

MySQL 임베디드 서버로 링크하기 위해 요구되는 라이브러리들과 옵션들.

 

옵션없이 mysql_config 실행하면 지원하는 옵션과 그 값들의 리스트를 보여준다.

shell> mysql_config

Usage: /usr/bin/mysql_config [OPTIONS]

Options:

■■■--cflags■■■[-I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -DUNIV_LINUX -DUNIV_LINUX]

■■■--include■■[-I/usr/include/mysql]

■■■--libs■■■■[-Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient]

■■■--libs_r■■■[-Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient_r]

■■■--plugindir[/usr/lib/mysql/plugin]

■■■--socket■■[/var/run/mysqld/mysqld.sock]

■■■--port■■■■[0]

■■■--version■■[5.1.41]

■■■--libmysqld-libs[-Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqld -ldl -lwrap -lrt]

 

쉘 프롬프트 창에서 MySQL 클라이언트 프로그램 컴파일 예:

shell> CFG=/usr/local/mysql/bin/mysql_config

shell> sh -c "gcc -o progname `$CFG --cflags` progname.c `$CFG --libs`"

이런 방법으로 mysql_config을 사용할 때, 백틱(backtick / '`'캐릭터 내에서 그것을 실행해야 한다. 

그것은 쉘(shell)이 그것을 실행하도록 명령하며, 그 아웃풋을 주변 명령문에 대신 넣는다.

 

make를 이용한 MySQL 클라이언트 프로그램 컴파일 예:

Makefile 작성

CC = gcc

CFLAGS = -Wall $(shell mysql_config --cflags)

LIBS = $(shell mysql_config --libs)

 

EXECUTABLES = myclient

■■■■all : $(EXECUTABLES)

 

myclient : myclient.c

■■■■$(CC) $(CFLAGS) $^ -o $@ $(LIBS)

Make의 $(shell 셸 명령어) 함수를 이용하면 shell 함수 뒤에 오는 셸 명령을 수행하고 결과를 리턴한다.

Posted by devanix
2011. 7. 11. 01:46

MYSQL

이 구조는 하나의 데이터베이스 커넥션을 다루는 방법을 나타낸다. 

이것은 대부분 모든MySQL 함수에 사용된다. 

사용자는 MYSQL 구조의 카피를 만들 필요가 없다. 이런 카피가 사용 가능하다는 보장이 없다.

 

MYSQL_RES

이 구조는 로우들을 리턴한 쿼리의 결과를 나타낸다 rows (SELECT, SHOW, DESCRIBE,EXPLAIN). 

쿼리에서 리턴된 정보는 이 장의 나머지에 result set 로 호출된다.

 

MYSQL_ROW

이것은 데이터의 열 하나의 타입에 따라 나타난다. 

이것은 일반적으로 계산되는 바이트 문자열(스트링)의 어레이로 실행된다.

(필드 값이 바이너리 데이터를 포함하고 있다면,이런 값들이 null 바이트를

내부적으로 포함하고 있기 때문에 사용자는 이것들을 null-terminated 문자열로 취급할 수 없다) 

mysql_fetch_row()함수를 호출하여 로우들을 얻는다.

 

MYSQL_FIELD

이 구조는 필드 이름, 타입 사이즈 등과 같은 필드 정보를 포함하고 있다. 

이 요소들이 여기에 자세히 기술되어 있다. 

사용자는 각 필드에서 mysql_fetch_field() 함수를 반복적으로 호출함으로써 MYSQL_FIELD 구조를 얻을 수 있다. 

필드 값들은 이 구조의 부분이 아니다; 그것들은 MYSQL_ROW 구조에 포함되어 있다

 

MYSQL_FIELD_OFFSET

이것은 MySQL 필드 리스트 안에 오프셋의 타입에 따라 나타난다.

(mysql_field_seek()함수가 사용됨) 오프셋들은 0(제로)에서 시작한 하나의 로우 내에서 필드의 요소이다.

 

my_ulonglong

로우의 숫자, mysql_affected_rows(), mysql_num_rows(),  mysql_insert_id()함수에 사용된 타입. 

이 타입은 부터 1.84e19까지의 범위를 제공한다.

   

몇몇 시스템에서 my_ulonglong 타입 값이 출력되지 않는 경우가 있다. 

이런 값을 출력하려면, unsigned long 으로 변경하고, %lu 프린트 포맷을 이용.

예:)

printf ("Number of rows: %lu\n", (unsigned long) mysql_num_rows(result));

   

 

MYSQL_FIELD 구조는 여기 열거한 요소들을 포함하고 있다:

char * name

null-terminated 문자열로, 필드의 이름. 필드에 AS 절로 알리아스(alias)가 주어졌다면,name 값은 그 알리아스(alias)이다.

char * org_name

null-terminated 문자열로, 필드 이름. 알리아스들이 무시된다.

char * table

계산되지 않은 필드를 포함하는 테이블 이름. 계산된 필드의 경우, table 값은 빈 문자열이다. 

테이블에 AS 절로 알리아스가 주어졌다면, table 값은 그 알리아스이다.

char * org_table

null-terminated 문자열로, 테이블 이름. 알리아스들이 무시된다.

char * db

null-terminated 문자열로, 필드에서 온 데이터베이스의 이름. 필드가 계산된 필드라면,db 는 빈 문자열이다.

char * catalog

카다로그 이름. 이 값은 항상 "def"이다.  

char * def

null-terminated 문자열로, 이 필드의 디폴트 값. mysql_list_fields()을 사용하면, 이것이 설정된다.

unsigned long length

테이블 정의에서 지정된 필드의 너비

unsigned long max_length

결과 셋의 필드 최대 너비(실제 결과 세트에서 로우를 위한 가장 긴 필드 값의 길이). 

만약mysql_store_result() 또는 mysql_list_fields()을 사용한다면, 이것은 필드의 최대 길이를 포함하고 있다. 

만약 mysql_use_result() 함수를 사용한다면, 이 변수의 값은0(zero)이다.

unsigned int name_length

name의 길이

unsigned int org_name_length

org_name의 길이.

unsigned int table_length

table의 길이

unsigned int org_table_length

org_table의 길이

unsigned int db_length

db의 길이

unsigned int catalog_length

catalog의 길이.

unsigned int def_length

def의 길이.

unsigned int flags

필드에서 서로 다른 비트 플래그(bit-flag). flags 값은 0(zero) 또는 비트 세트에 따라 더 큰 값이 될 수 있다:

플래그(Flag) 값

플래그(Flag) 설명

NOT_NULL_FLAG

필드는 NULL 이 될 수 없다.

PRI_KEY_FLAG

필드는 주요 키의 일부이다.

UNIQUE_KEY_FLAG

필드는 싱글(unique)키의 일부이다.

MULTIPLE_KEY_FLAG

필드는non-unique 키의 일부이다.

UNSIGNED_FLAG

필드는UNSIGNED 속성을 가진다.

ZEROFILL_FLAG

필드는 ZEROFILL 속성을 가진다.

BINARY_FLAG

필드는 BINARY 속성을 가진다.

AUTO_INCREMENT_FLAG

필드는 AUTO_INCREMENT 속성을 가진다.

ENUM_FLAG

필드는ENUM (deprecated)이다.

SET_FLAG

필드는 SET (deprecated)이다.

BLOB_FLAG

필드는BLOB 또는 TEXT (deprecated)이다.

TIMESTAMP_FLAG

필드는 TIMESTAMP (deprecated)이다.

   

플래그들이 타입의 속성보다는 필드의 타입을 표시하기 때문에 

BLOB_FLAG,ENUM_FLAG, SET_FLAG, 그리고 TIMESTAMP_FLAG 플래그(flags) 이용은 무시된다.

   

MYSQL_TYPE_BLOB, MYSQL_TYPE_ENUM, MYSQL_TYPE_SET

또는MYSQL_TYPE_TIMESTAMP 대신에 field->type 테스트가 바람직하다.

   

다음 예는 flags 값의 전형적인 이용을 보여준다:

if (field->flags & NOT_NULL_FLAG)

    printf("Field can't be null\n");

   

flags 값을 결정하기 위해 다음 편리한 매크로를 사용할 수 있다:

Flag 상태

설명

IS_NOT_NULL(flags)

필드가 NOT NULL로 정의된다면 참(true)

IS_PRI_KEY(flags)

이 필드가 주요 키라면 참(True)

IS_BLOB(flags)

이 필드가 BLOB 또는 TEXT (무시됨; 테스트 field->type 대신에)라면 참(true)

unsigned int decimals

숫자 필드에 십진수의 숫자.

unsigned int charsetnr

필드에서 캐릭터 셋 숫자.

enum enum_field_types type

필드의 타입. type 값은 다음 표에 있는 MYSQL_TYPE_ 심볼 중 하나 일 수 있다.

   

타입 값

타입 설명

MYSQL_TYPE_TINY

TINYINT 필드

MYSQL_TYPE_SHORT

SMALLINT 필드

MYSQL_TYPE_LONG

INTEGER 필드

MYSQL_TYPE_INT24

MEDIUMINT 필드

MYSQL_TYPE_LONGLONG

BIGINT 필드

MYSQL_TYPE_DECIMAL

DECIMAL 또는 NUMERIC 필드

MYSQL_TYPE_NEWDECIMAL

정교한 계산 DECIMAL 또는 NUMERIC필드 (MySQL 5.0.3 그리고 그 이후 버전에서)

MYSQL_TYPE_FLOAT

FLOAT 필드

MYSQL_TYPE_DOUBLE

DOUBLE 또는 REAL 필드

MYSQL_TYPE_BIT

BIT 필드 (MySQL 5.0.3 그리고 그 이후 버전에서)

MYSQL_TYPE_TIMESTAMP

TIMESTAMP 필드

MYSQL_TYPE_DATE

DATE 필드

MYSQL_TYPE_TIME

TIME 필드

MYSQL_TYPE_DATETIME

DATETIME 필드

MYSQL_TYPE_YEAR

YEAR 필드

MYSQL_TYPE_STRING

CHAR 또는 BINARY 필드

MYSQL_TYPE_VAR_STRING

VARCHAR 또는 VARBINARY 필드

MYSQL_TYPE_BLOB

BLOB 또는 TEXT 필드 (최대 길이를 결정하기 위해 max_length 를 사용하라)

MYSQL_TYPE_SET

SET 필드

MYSQL_TYPE_ENUM

ENUM 필드

MYSQL_TYPE_GEOMETRY

공간적 필드

MYSQL_TYPE_NULL

NULL-타입 필드

MYSQL_TYPE_CHAR

무시됨; 대신에MYSQL_TYPE_TINY 를 사용하라

   

필드가 숫자타입을 가지고 있는지 테스트하기 위해  IS_NUM() 매크로를 사용할 수 있다.

type 값을IS_NUM()에 전달하라 그러면 필드가 숫자라면 참(TRUE)로 평가한다:

if (IS_NUM(field->type))

    printf("Field is numeric\n");

   

문자열 데이터 타입에서 바이너리 데이터와 non-바이너리 데이터를 비교하기 위해서charsetnr 값이 63인지 확인하라. 

만약 그렇다면, 캐릭터 셋은 non-바이너리 데이터보다 바이너리를 보여주는 binary이다. 

이것이 BINARY 와 CHAR, VARBINARY 와VARCHAR,  BLOB 와 TEXT를 구별하는 방법이다.

Posted by devanix
2011. 7. 10. 23:38

함수

설명

mysql_affected_rows()

마지막 UPDATE, DELETE, INSERT 쿼리에 의해 변경된 행의 수를 리턴.

mysql_autocommit()

자동수행(autocommit) 모드 on/off를 전환한다.

mysql_change_user()

공개된 커넥션에서 사용자와 데이터베이스 변경.

mysql_close()

서버 연결을 종료.

mysql_commit()

트랜잭션을 수행.

mysql_connect()

MySQL 서버를 연결.(이 함수는 무시됨; 대신 mysql_real_connect() 사용)

mysql_create_db()

데이터베이스를 생성.(이 함수는 무시됨; 대신에 SQL 문CREATE DATABASE 을 사용)

mysql_data_seek()

쿼리 결과 세트에서 임의의 로우 숫자를 찾는다.

mysql_debug()

주어진 문자열로 DBUG_PUSH 한다.

mysql_drop_db()

데이터베이스를 드롭.(이 함수는 무시됨; 대신에SQL문  DROP DATABASE 을 사용)

mysql_dump_debug_info()

서버가 로그에 디버그 정보를 쓰게 만든다.

mysql_eof()

결과 셋의 마지막 로우가 읽혀지는지 여부를 결정한다.

(이 기능은 무시된다; mysql_errno() 또는 mysql_error() 함수가 대신 사용)

mysql_errno()

가장 최근에 호출된 MySQL 함수의 에러 숫자를 리턴한다.

mysql_error()

가장 최근에 호출된 MySQL 함수의 에러 메시지를 리턴한다.

mysql_escape_string()

SQL 문에 사용하는 경우 문자열에서 스페셜 문자(캐릭터)를 중단한다.

mysql_fetch_field()

다음 테이블 필드의 타입을 리턴한다.

mysql_fetch_field_direct()

필드 숫자가 주어진 테이블 필드의 타입을 리턴한다.

mysql_fetch_fields()

모든 필드 구조의 배열을 리턴한다.

mysql_fetch_lengths()

현재 로우에서 모든 컬럼의 길이를 리턴한다.

mysql_fetch_row()

결과 셋에서 그 다음 로우를 호출한다.

mysql_field_seek()

컬럼 커서를 지정된 컬럼에 넣는다.

mysql_field_count()

가장 최근 명령문의 경우 결과 컬럼의 수를 리턴한다.

mysql_field_tell()

마지막 mysql_fetch_field()함수에 사용된 필드 커서의 포지션을 리턴.

mysql_free_result()

결과 셋이 사용한 메모리를 제거한다.

mysql_get_client_info()

문자열로써 클라이언트 버전 정보를 리턴한다.

mysql_get_client_version()

정수로써 클라이언트 버전 정보를 리턴한다.

mysql_get_host_info()

커넥션을 설명한 문자열을 리턴한다.

mysql_get_server_version()

정수로써 서버의 버전 숫자를 리턴한다.

mysql_get_proto_info()

연결에 사용된 프로토콜 버전을 리턴한다.

mysql_get_server_info()

서버 버전 숫자를 리턴한다.

mysql_info()

가장 최근에 실행된 쿼리에 관한 정보를 리턴한다.

mysql_init()

MYSQL 구조를 획득하거나 초기화하다.

mysql_insert_id()

AUTO_INCREMENT 컬럼에 이전 쿼리에 의해 발생한ID를 리턴한다.

mysql_kill()

주어진 쓰레드를 끄다(죽이다).

mysql_library_end()

MySQL C API 라이브러리는 끝내다.

mysql_library_init()

MySQL C API 라이브러리를 초기화하다.

mysql_list_dbs()

간단한 수식에 맞는 데이터베이스 이름을 리턴한다.

mysql_list_fields()

간단한 수식에 맞는 필드 이름을 리턴한다.

mysql_list_processes()

현재 서버 쓰레드의 목록을 리턴한다.

mysql_list_tables()

간단한 수식에 맞는 테이블 이름을 리턴한다.

mysql_more_results()

더 많은 결과가 있는지 체크한다.

mysql_next_result()

멀티-명령문 실행에서 그 다음 결과를 리턴한다/초기화한다.

mysql_num_fields()

결과 셋에서 컬럼의 숫자를 리턴한다.

mysql_num_rows()

결과 셋에서 로우의 숫자를 리턴한다.

mysql_options()

mysql_connect()함수의 경우 연결 옵션을 설정한다

mysql_ping()

필요에 따라 서버로의 연결이 되어 있는지 다시 연결해야 할지 체크한다.

mysql_query()

null로 종결된 문자열로 지정된 SQL 쿼리를 실행한다.

mysql_real_connect()

MySQL 서버로 연결한다.

mysql_real_escape_string()

현재 연결중인 캐릭터 셋을 고려하여 SQL 문에서 사용시 문자열에서 특수 문자를 중단.

mysql_real_query()

계산에 포함된 문자열로 지정된 SQL 쿼리를 실행한다.

mysql_refresh()

테이블과 캐시를 쏟아내거나(flush) 재설정한다.

mysql_reload()

서버가 grant 테이블을 다시 로드 하도록 전달한다.

mysql_rollback()

트랜잭션 롤백.

mysql_row_seek()

mysql_row_tell()함수로부터 리턴된 값을 사용하는 결과 셋에서 로우 오프셋을 찾음

mysql_row_tell()

로우 커서 위치를 리턴한다.

mysql_select_db()

데이터베이스를 선택한다.

mysql_server_end()

임베디드 서버 라이브러리를 종결한다.

mysql_server_init()

임베디드 서버 라이브러리를 초기화한다.

mysql_set_local_infile_default()

디폴트 값으로LOAD DATA LOCAL INFILE 조정기 콜백(callback)을 설정.

mysql_set_local_infile_handler()

어플리케이션을 위한LOAD DATA LOCAL INFILE 조정기 콜백을 인스톨함

mysql_set_server_option()

연결시 옵션을 설정한다(lmulti-statements처럼).

mysql_sqlstate()

최근 에러의 경우, SQLSTATE 에러코드를 리턴한다.

mysql_shutdown()

데이터베이스 서버를 셧다운한다.

mysql_stat()

문자열로 서버의 상태를 리턴한다.

mysql_store_result()

클라이언트로 완벽한 결과 셋을 검색한다.

mysql_thread_id()

현재 쓰레드 ID를 리턴한다.

mysql_thread_safe()

클라이언트가 쓰레드에 안전하게 컴파일 되었다면 1을 리턴한다.

mysql_use_result()

로우 별로 결과 셋 검색을 시작한다.

mysql_warning_count()

이전 SQL문의 경우 경고 카운트를 리턴한다.

   

[ 어플리케이션은 일반적인 아우트라인을 사용 ]

mysql_library_init()를 호출함으로써 MySQL 라이브러리를 초기화. 

(레귤러 클라이언트, 임베디드 서버 어플리케이션 구출할 때 사용)

mysql_init() 를 호출하여 연결 핸들러를 초기화하고 mysql_real_connect()를 호출하여 서버에 연결.

③ SQL 명령문을 실행.

mysql_close()함수를 호출하여 MySQL 서버로의 연결을 종료.

mysql_library_end()함수를 호출하여 MySQL 라이브러리의 사용을 종료.

 

mysql_library_init() 과 mysql_library_end() 함수의 호출 목적은 MySQL 라이브러리의 적당한 초기화와 최종화를 제공. 

클라이언트 라이브러리로 링크되는 어플리케이션의 경우, 향상된 메모리 매니지먼트를 제공한다. 

mysql_library_end()함수를 호출하지 않는다면, 메모리 블록은 할당된 채로 남는다.

(이것은 어플리케이션에 의해 사용된 메머리의 총량을 증가시키지 않지만 몇몇 메모리 리크 검전기가 그것에 대해 알려줄 것이다.) 

임베디드 서버로 링크되는 어플리케이션의 경우, 이런 호출들은 서버를 시작하고 종료한다.

   

mysql_library_init() 와 mysql_library_end() 함수는 MySQL 5.0.3 버전부터 적용된다. 

이것들은 실제로 mysql_server_init() 와 mysql_server_end()함수에 상응하는 #define 상징이다. 

그러나 어플리케이션이 mysqlclient 또는 mysqld 라이브러리를 사용하든 말든 간에 

MySQL 라이브러리의 사용을 시작하고 종료할 때 호출된다는 것을 이름들이 더 명확히 나타낸다.

MySQL 기존 버전의 경우, 대신에 mysql_server_init() 과 mysql_server_end() 함수를 호출할 수 있다.

   

non-멀티-쓰레드 환경에서, mysql_library_init() 로 호출은 생략된다.

mysql_init() 함수가 필요에 따라 그것을 불러오기 때문이다. 

그러나 멀티-쓰레드 환경에서 mysql_init() 함수가mysql_library_init() 함수를 불러온다면, 경쟁조건(race condition)이 가능하다

:mysql_library_init() 함수는 쓰레드에 안전하지 않아서 다른 클라이언트 라이브러리 호출보다 먼저 호출되어야 한다.

   

서버에 연결하기 위해서, 연결 조정기를 초기화하는 mysql_init() 함수를 호출하라. 

그리고 나서 그 조정기로 mysql_real_connect() 함수를 호출하라 

(호스트이름, 사용자이름, 패스워드와 같은 다른 정보를 함께). 

연결 상태에서mysql_real_connect() 함수는 reconnect 플래그(MYSQL 구조의 부분)를 5.0.3 이전 API의 버전에서는 1 로, 

또는 새로운 버전에서는 0 으로 값으로 설정한다. 이 플래그에서 값은 연결이 끊겨서 명령문이 실행되지 않는다면, 

포기하기 전에 서버로 다시 연결을 시도하려는 것을  나타낸다.

MySQL 5.0.3버전에서부터 재 연결 작동을 컨트롤하기 위해mysql_options() 함수로  MYSQL_OPT_RECONNECT 옵션을 사용할 수 있다. 

연결해서 작업을 마친 후, 그것을 종결하기 위해 mysql_close() 함수를 호출하라.

연결 중일 때, 클라이언트는 SQL문을 mysql_query() 또는 mysql_real_query(). 함수를 사용하는 서버로 전달한다.

mysql_query() 함수는 쿼리가 null-종결 문자열로 지정되기를 기대하는 반면,

mysql_real_query() 함수는 계산에 포함된 문자열을 기대한다는 것이 두 함수의 다른 점이다. 

만약 문자열이 바이너리 데이터(null 바이트를 포함한)를 포함하고 있다면, mysql_real_query()함수를 사용해야 하다.

   

각 non-SELECT 쿼리의 경우(예를 들어, INSERTUPDATEDELETE), mysql_affected_rows() 함수를 호출하여 얼마나 많은 로우들이 변경되었는지 알 수 있다.

   

SELECT 쿼리들의 경우, 사용자는 결과 세트로써 선택된 로우들을 검색한다. (몇몇 문은 로우들을 리턴하는 SELECT와 같다는 것을 명심하라. 이것은 SHOWDESCRIBE, 그리고 EXPLAIN를 포함하고 있다. 이것들은 SELECT 문과 같은 방식으로 처리된다.)

   

클라이언트가 결과 셋에 접근하는 2가지 방법이 있다. 하나는 mysql_store_result() 함수를 호출하여 한번에 전체 결과 세트를 검색하는 것이다. 이 함수는 쿼리가 리턴한 모든 로우들을 서버로부터 얻어 클라이언트에 그것을 저장한다. 두 번째 방법은 mysql_use_result() 함수를 호출하여 클라이언트가 로우별로 결과 세트 검색을 초기화하는 것이다. 이 함수는 검색을 초기화하지만 실제로 서버로부터 어떤 로우도 획득하지 못한다.

   

두 경우에서, mysql_fetch_row() 함수를 호출함으로써 로우에 접근할 수 있다.mysql_store_result() 함수를 가지고, mysql_fetch_row() 함수는 서버에서 이전에 명령을 꺼낸 로우들에 접근하다.

   

mysql_use_result() 함수를 가지고,  mysql_fetch_row() 함수는 실제로 서버로부터 로우를 검색한다. 각 로우에 있는 데이터 크기에 대한 정보는 mysql_fetch_lengths() 함수를 호출하여 이용할 수 있다.

   

결과 세트를 마친 후, 그것에 이용된 메모리를 제거하기 위해 mysql_free_result() 함수를 호출한다.

두 가지 검색 매커니즘은 상호 보완적이다. 클라이언트 프로그램은 요구에 가장 알맞은 접근을 선택한다.

실제로 클라이언트는 mysql_store_result() 함수를 통상적으로 쓰는 경향이 있다.

   

mysql_store_result() 함수의 장점은 로우들이 모두 클라이언트로 오기 때문에 사용자가 순차적으로 로우에 접근할 수 있고, 결과 세트 내에서 현재 로우 위치를 변경하기 위해 mysql_data_seek()또는 mysql_row_seek() 함수를 이용하여 앞뒤로 움직일 수 있다는 것이다. 그리고mysql_num_rows()함수를 호출하여 로우의 양을 알아볼 수 있다. 반면, On mysql_store_result() 함수의 메모리 요구사항은 큰 결과 세트 용으로 매우 높아 메모리가 부족해질 수 있다.

   

mysql_use_result() 함수의 장점은 한번에 하나의 로우씩만 유지하기 때문에(그리고 총 할당량이 적어 mysql_use_result() 함수가 더 빠를 수 있기 때문에) 클라이언트가 결과 세트에서 메모리를 덜 요구한다는 점이다. 단점은 서버를 간섭하는 것을 막기 위해 빨리 각 로우를 처리해야 하고, 결과 세트 내에서 로우들로 무작위로 접근할 수 없으며(로두를 순차적으로 엑세스할 수 있다), 로우를 모두 검색할 때까지 로우의 양을 사용자가 알 수 없다는 점이다. 게다가 사용자가 찾고자 하는 정보를 찾았다는 것을 검색 중에 알아도 모든 로우들을 검색해야만 한다.

   

API는 문이 SELECT 인지 아닌지도 모르고 클라이언트가 명령문에 적절하게 응답할 수 있도록 한다(필요한 로우만 검색). 각 mysql_query() 함수(또는 mysql_real_query()함수) 후에,mysql_store_result()함수를 호출하여 이것을 할 수 있다. 결과 세트가 성공적으로 호출되면, 명령문은 SELECT였고, 사용자는 로우들을 읽을 수 있다. 결과 세트 호출이 실패하면, 결과가 예정대로 되었는지 여부를 결정하기 위해서 mysql_field_count() 함수를 호출하라. 만약mysql_field_count() 함수가 0(zero)를 리턴하면, 문은 데이터를 리턴하지 않았고(INSERT,UPDATEDELETE 등으로 나타남), 리턴할 로우 또한 기대되지 않았다.(그래서 보여줄 데이터가 없다). 만약 mysql_field_count() 함수가 0(zero)이 아니라면, 문은 로우들을 리턴했을 수 있지만, 그러지 않았다. 이것은 문이 실패한 SELECT 였다는 것을 나타낸다. 이것이 어떻게 될 수 있는지 예를 보려면 mysql_field_count() 함수의 설명을 참조하라

   

mysql_store_result() 와 mysql_use_result() 두 함수로 결과 세트를 보완하는 필드에 대한 정보(필드의 숫자, 이름, 타입 등)를 얻을 수 있다. 사용자는 로우 내에서 mysql_fetch_field() 함수를 반복해서 호출하거나 또는 로우 내에서  mysql_fetch_field_direct() 함수를 호출하여 필드 숫자로 필드 정보에 순차적으로 접근할 수 있거나, 현재 필드 커서 위치는 mysql_field_seek()함수를 호출하여 변경할 수 있다. 필드 커서 설정은 다음 mysql_fetch_field() 함수로 호출에 영향을 미친다. 사용자는 mysql_fetch_field() 함수를 호출하여 한번에 필드에 대한 모든 정보를 얻을 수 있다.

   

에러를 발견하고 리포트하는 경우, MySQL은 mysql_errno() 와 mysql_error() 함수로 에러 정보로의 접근을 제공한다. 

이것들은 사용자가 에러가 언제 발생하고 그것이 무엇인지를 결정하도록 함으로써 성공 혹은 실패할 수 있는 가장 최근 호출된 함수에 대한 에러 코드 또는 에러 메시지를 리턴한다.

 

 

원문 : http://www.mysqlkorea.co.kr/sub.html?mcode=manual&scode=01&m_no=21770&cat1=22&cat2=596&cat3=605&lang=k

Posted by devanix
2011. 7. 7. 22:09

   



C언어포인터
카테고리 컴퓨터/IT > 프로그래밍/언어 > C
지은이 정재은 (정보문화사, 2003년)
상세보기 [ Down ]

   

[ 책소개 ]

이 책은 포인터와 배열만을 다룬것이 아니라 가벼운 인자, 함수포인터, 함수 인자포인터,

자기 참조 구조체등 C언어의 전반에서 모두 사용되는 포인터를 다루고 있다.

메모리해제에 관한 자세한 해설과 예제등 다양한 실무경험을 통해 터득한 내용들을 쉽게 서술하였다

   

[ 목차 ]

Chapter1 포인터의 기초

1 포인터란 무엇인가? 14

2 포인터 변수 15

3 포인터 변수 정의 15

4 쓰레기 주소 값 17

5 & 연산자 18

6 포인터 변수에 번지 할당 20

7 포인터 변수에 왜 타입을 지정하는가? 27

   

Chapter2 1차원 배열과 포인터

1 1차원 배열과 포인터 32

2 첨자 생략 35

3 다차원 배열 35

4 1차원 배열과 포인터 37

5 포인터 + 정수의 의미 39

6 배열명의 숨은 뜻 44

   

Chapter3 2차원 배열과 포인터

1 이것만 알면 만사 OK 50

2 기본 50

3 배열 포인터 정의 52

4 2차원 배열과 2차원 배열 포인터 변수 연결 53

5 2차원 배열 기본 다지기 56

6 imsip = imsi 60

7 int imsi[2][3]의 모든 것 61

8 함수 인자 포인터 65

9 2차원 포인터 다루기 66

10 2차원 포인터 이것만은 알아두자 72

11 int (*imsi)[2], int *temp[2]의 차이 81

12 *temp[3]에서 temp의 의미는? 86

   

Chapter4 문자열과 포인터

1 문자열이란 무엇인가? 92

2 a, 'a', "a"의 차이 92

3 문자열 포인터 변수 94

4 포인터를 이용한 문자열 조작 96

5 착각하기 쉬운 첨자 98

6 *string과 string[ ]의 차이 99

7 문자열 상수 변경 103

8 문자열과 포인터 배열 106

9 포인터 배열에 문자열 할당 109

   

Chapter5 포인터의 포인터

1 포인터의 포인터는 무엇인가? 118

2 포인터의 포인터 변수 정의 118

3 어디에 사용하는가? 118

4 초기화 119

5 포인터의 포인터 참조 121

6 주의 사항 125

7 주의 사항 하나 더 126

8 명령행 인자 127

   

Chapter6 scanf( )와 fgets( )

1 scanf( )와 fgets( ) 132

   

Chapter7 strcpy( )의 비밀

1 strcpy( )의 함정 140

2 배열을 이용한 strcpy( ) 142

3 포인터 변수를 이용한 strcpy( ) 143

4 배열과 malloc( )을 이용한 번지 할당 146

   

Chapter8 뒤죽박죽 포인터

1 뒤죽박죽 포인터? 150

   

Chapter9 포인터의 개념을 깨는 0

1 의문점 154

2 널 포인터 156

3 주의 사항 157

4 널 포인터의 사용처 157

   

Chapter10 바로 알자 getchar( )

1 getchar( )의 함정 162

   

Chapter11 가변 인자

1 가변 인자란? 166

2 가변 인자 사용 단계 167

3 가변 인자를 위한 매크로 168

4 가변 인자의 사용 169

5 주의 사항 171

   

Chapter12 될 것 같으면서 안 되는 코드

1 초보자들이 무시하는 쓰레기 주소 값 174

   

Chapter13 (int *)pointer

1 캐스트 연산자의 이해 186

   

Chapter14 void형 포인터

1 void형 포인터란? 192

2 void형 변수 포인터 정의 193

3 void형 포인터 변수의 성질 193

4 void형 포인터 변수의 사용 193

5 *((int *)voidp)++ 200

6 주의 사항 203

   

Chapter15 함수 인자 포인터

1 함수 인자 포인터란? 206

2 1차원 함수 인자 포인터 206

3 int형 배열 209

4 문자열 포인터 213

5 1차원 포인터 배열 214

6 2차원 포인터 배열 216

   

Chapter16 함수 포인터

1 함수 포인터의 매력 224

2 함수 포인터의 정의 224

3 함수 포인터의 초기화 225

4 함수 포인터 호출 225

   

Chapter17 구조체와 포인터

1 간단한 구조체 개념 230

2 주소록 230

3 구조체 선언과 정의 231

4 구조체 연산 233

5 구조체와 포인터 234

6 멤버 초기화 236

7 주의 사항 237

8 중첩 구조체 240

9 구조체 복사 242

10 매개변수가 구조체 배열인 함수 245

11 자기 참조 구조체 251

12 리스트 262

   

Chapter18 메모리 할당과 해제

1 동적 메모리 할당 270

2 동적 메모리 할당의 장·단점 272

3 malloc( ) 273

4 가장 간단한 메모리 할당 274

5 동적 메모리 영역 초기화 275

6 할당 가능한 메모리 영역 알아보기 276

7 문자열 포인터 변수를 위한 malloc( ) 277

8 구조체 포인터 변수를 위한 malloc( ) 278

9 calloc( ) 279

10 realloc( ) 281

11 메모리 해제 282

12 간단한 메모리 해제 283

13 리스트의 메모리 해제 283

14 복잡한 메모리 해제 287

   

Chapter19 라이브러리

1 라이브러리란? 296

2 라이브러리의 특징 298

3 ar 298

4 ar 옵션 (/usr/ccs/bin) 299

5 라이브러리 생성 단계 299

 

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

The GNU C Library Reference Manual  (0) 2011.09.08
The C Library Reference Guide  (0) 2011.09.08
비트 제어 - 설정, 클리어, 반전, 검사, 추출  (0) 2011.07.29
연산자 우선순위  (0) 2010.05.05
매크로  (0) 2010.05.05
Posted by devanix
2011. 7. 7. 08:33

   


LearningtheviandVimEditors
카테고리 과학/기술>컴퓨터 > OS/운영체제
지은이 Linda Lamb , Arnold Robbins , Elbert Hannah (O'ReillyMedia, 1970년)
상세보기 [ view ]

[ 책소개 ]

There's nothing that hard-core Unix and Linux users are more fanatical

about than their text editor. Editors are the subject of adoration and worship,

or of scorn and ridicule, depending upon whether the topic of discussion is

your editor or someone else's. vi has been the standard editor for close to 30 years.

Popular on Unix and Linux, it has a growing following on Windows systems, too.

Most experienced system administrators cite vi as their tool of choice. And since 1986,

this book has been the guide for vi. However, Unix systems are not what they were 30

years ago, and neither is this book. While retaining all the valuable features of

previous editions, the 7th edition of Learning the vi and Vim Editors has been

expanded to include detailed information on vim, the leading vi clone. Vim is the

default version of vi on most Linux systems and on Mac OS X, and is available for many

other operating systems too. With this guide, you learn text editing basics and advanced

tools for both editors, such as multi-window editing, how to write both interactive

macros and scripts to extend the editor, and power tools for programmers - all in the

easy-to-follow style that has made this book a classic.

   

Posted by devanix
2011. 7. 7. 03:18

   


UNIXNETWORKPROGRAMMINGVOLUME1(제3판) 상세보기


[ 책소개 ]

UNIX NETWORK PROGRAMMING 제3판. 컴퓨터 통신을 전공하거나 현업에서 종사하고 있는 이들에게

도움이 된다. 특히 응용에서 직접 이용할 수 있는 많은 프로그램 예제들을 보여주고 있어 초보자

에게는 문제와 해법을 이해하는 데, 전문가에게는 더욱 효율적인 해법을 모색하는 데 참고가 될 것이다.

   

[ 목차 ]

Part 1. Introduction and TCP/IP

Chapter 1. Introduction and TCP/IP

Chapter 2. The Transport Layer : TCP and UDP, and SCTP

   

Part 2. Elementary Sockets

Chapter 3. Sockets Introduction

Chapter 4. Elementary TCP Sockets

Chapter 5. TCP Client-Server Example

Chapter 6. I/O Multiplexing : The select and poll Functions

Chapter 7. Socket Options

Chapter 8. Elementary UDP Sockets

Chapter 9. Elementary SCTP Sockets

Chapter 10. SCTP Client/Server Example

Chapter 11. Name and Address Conversions

   

Part 3. Advanced Sockets

Chapter 12. IPv4 and IPv6 Interoperability

Chapter 13. Daemon Processes and inetd Superserver

Chapter 14. Advanced I/O Functions

Chapter 15. Unix Domain Protocols

Chapter 16. Nonblocking I/O

Chapter 17. ioctl Operations

Chapter 18. Routing Sockets

Chapter 19. Key Management Sockets

Chapter 20. Broadcasting

Chapter 21. Multicasting

Chapter 22. Advanced UDP Sockets

Chapter 23. Advanced SCTP Sockets

Chapter 24. Out-of-Band Data

Chapter 25. Signal-Driven I/O

Chapter 26. Threads

Chapter 27. IP Options

Chapter 28. Raw Sockets

Chapter 29. Datalink Access

Chapter 30. Client-Server Design Alternatives

Chapter 31. STREAMS

   

Appendix A. IPv4, IPv6, ICMPv4, and ICMPv6

Appendix B. Virtual Networks

Appendix C. Debugging Techniques

Appendix D. Miscellaneous Source Code

 D.1 - unp.h Header.

 D.2 - config.h Header.

 D.3 - Standard Error Functions. 

Appendix E. Solutions to Selected Exercises

 

Posted by devanix
2011. 7. 7. 02:26

   PDF [ view ]
 

리눅스소켓프로그래밍
카테고리 미분류
지은이 웨런 W.게이 (인포북, 2004년)
상세보기

[ 책소개 ]

이 책은 리눅스 소켓 프로그래밍을 사용하는 방법을 가르치고 있다.

또한 네트워크 클라이언트/서버를 작성하는 방법을 "예제로 배우는"방식으로 소켓 프로그래밍에

접근하고 있다. 소켓의 기본 개념부터 다양한 용도의 서버 프로그램을 작성하기 위한 I/O 모델을

포함하여 보안의 개념까지 상당히 넓은 개념을 포함하고 있다.

   

[ 목차 ]

   

Part 1 기본적인 소켓 개념

Chapter 1 소켓의 개요

Chapter 2 도메인과 주소 패밀리

Chapter 3 주소 변환 함수

Chapter 4 소켓 형식과 프로토콜

Chapter 5 주소를 소켓에 바인드하기

Chapter 6 비연결 지향 프로토콜

Chapter 7 클라이언트를 위한 연결 지향 프로토콜

Chapter 8 서버를 위한 연결 지향 프로토콜

Chapter 9 호스트 이름과 네트워크 이름 조회

   

Part 2 고급 소켓 프로그래밍

Chapter 10 소켓에 표준 I/O 사용하기

Chapter 11 동시 클라이언트 서버

Chapter 12 소켓 옵션

Chapter 13 UDP를 사용하여 브로드캐스트하기

Chapter 14 Out-of-Band 데이터

Chapter 15 inetd 데몬 사용하기

Chapter 16 네트워크 보안 프로그래밍

Chapter 17 자격 증명(credential)과 파일 설명자 전달하기

Chapter 18 실제 네트워크 프로젝트

   

Part 3 부록

Appendix A 소켓 함수 요약 참조

Appendix B 소켓 관련 구조체 참조

Appendix C 유용한 네트워크 표

   

Posted by devanix
2011. 7. 7. 01:23



TCP/IP네트워크(TCP/IPILLUSTRATEDVOLUME1)
카테고리 컴퓨터/IT > 네트워크/보안 > TCP/IP
지은이 W.RICHARD STEVENS (진영사, 1998년)
상세보기


[ 책소개 ]

TCP /IP에 대한 기본적인 개요를 시작으로 표준화 작업과정,표준적인 단순 서비스,응용 프로그램

인터 페이스,링크 계층, 인터넷 프로토콜,주소 변환 프로토콜, 인터넷 제어 메시지 프로토콜, Ping 프로그램,

IP라우팅 등을 총 30장에 걸쳐 상세히 해설한 저서.

   

[ 목차 ]

001. 서론

002. 링크 계층

003. 인터넷 프로토콜

004. 주소 변환 프로토콜(ARP: Address Resolution Protocol)

005. 역주소 변환 프로토콜

006. 인터넷 제어 메시지 프로토콜

007. Ping 프로그램

008. Trscetoute 프로그램

009. IP 라우팅

010. 동적(Dynamic) 라우팅 프로토콜

011. UDP: 사용자 데이터그램 프로토콜

012. 브로드 캐스팅과 멀티 캐스팅

013. IGMP: 인터넷 그룹 관리 프로토콜

014. DNS: 도메인 이름 시스템

015. Trivial 파일 전송 프로토콜

016. BOOTP: Bootstrap 프로토콜

017. TCP: 전송 제어 프로토콜

018. TCP 연결 확립과 종료

019. TCP 대화식 데이터 흐름

020. TCP 대용량 데이터 흐름

021. TCP 타임아웃과 재전송

022. TCP 지속 타이머

023. TCP 유지 타이머

024. 그 밖의 TCP 기능과 성능

025. SNMP: 단순 네트워크 관리 프로토콜

026. telnet & Rlogin: 원격 로그인

027. FTP: 파일 전송 프로토콜

028. SMTP: 단순 전자우편 전송 프로토콜

029. NFS: 네트워크 파일 시스템

030. 그 밖의 TCP/IP 응용 프로그램

 

Posted by devanix