본문 바로가기

Programming/C & C++

(4)
Byte alignment 하드웨어의 제약이나 성능상의 이유로 데이터들을 특정한 바이트 경계들에 맞게 배치한다. 이를 바이트 정렬(Byte alignment)라고 부른다. 이때 바이트 경계에 맞추기 위해서 객체의 자료 끝에 추가적인 바이트들을 채우게 된다. 32비트 ) 4bytes -> 2bytes -> 1byte 64비트 ) 8bytes -> 4bytes -> 2bytes -> 1byte Struct 에서도 같은 기준이 적용되는데 정렬기준을 찾을때는 구조체의 처음 멤버가 이닌 전체 멤버중에서 가장 큰 데이터 타입을 기준으로 정한다. 여기서 또 한가지 중요한것은 구조체 선언시 멤버들의 순서에 따라 바이트가 늘어 날 수 있다는 것인데 struct _test { char a; long b; chat c; } 는 (long 이 8바이트..
[ODBC] ODBC test 윈도우에서 ODBC 함수에 대한 간단한 테스트를 확인하기 위해서는 소스 및 컴파일러등 부수적인것들이 많이 필요하다. 매번 테스트할때 마다 준비하기는 불편한다. ODBCTest 라는 (https://www.progress.com/support/evaluation/download-resources/download-tools) 프로그램을 통해서 함수 단위로 테스트를 할 수 있다.
[ODBC] SQLSetStmtAttr SQL_ATTR_PARAMS_PROCESSED_PTR insert 등을 수행하고 나서 처리된 건수를 나타내는 변수의 포인터, SQLExecute() 에서 SQL_SUNCCESS_WITH_INFO 나 나온 경우 SQL_ATTR_PARAM_STATUS_PTR 로 등록된 배열의 상태를 검사하여 SQL_PARAM_SUCCESS_WITH_INFO, SQL_PARAM_ERROR, SQL_PARAM_DIAG_UNAVAILABLE 일때 bad record 처리를 해야 한다. SQL_ATTR_ATOMIC_EXECUTION 은 goldilocks 에서만 지원하는 것인가??
[ODBC] SQLGetInfo Connection 의 여러 정보를 확인하기 위해 쓰이는 함수 DBMS 의 종류를 식별하기 위해 방법을 찾던 중 아래와 같이 할 수 있었음 SQLCHAR dbmsName[1024]; SQLCHAR dbmsVerName[1024]; SQLSMALLINT buffersize; retcode = SQLGetInfo(hdbc, SQL_DBMS_NAME, dbmsName, (SQLSMALLINT)1024, (SQLSMALLINT *)&buffSize); retcode = SQLGetInfo(hdbc, SQL_DBMS_VER, dbmsVerName, (SQLSMALLINT)1024, (SQLSMALLINT *)&buffSize); printf ("SQL_DBMS_NAME : %s\n", dbmsName); prin..