2020-08-14修改
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libpq-fe.h>
#define SE_LIBPQPARAM_COUNT (9)
#define SE_UNI_SINGLE_CHAR_SIZE (1)
#define SE_LIBPQ_CONN_MAXCOUNT (16)
#define SE_LIBPQKEY_MAX_MEMLEN (SE_LIBPQ_CONN_MAXCOUNT * SE_UNI_SINGLE_CHAR_SIZE + sizeof(char))
#define SE_LIBPQVALUE_MAX_MEMLEN (SE_LIBPQ_CONN_MAXCOUNT * SE_UNI_SINGLE_CHAR_SIZE+ sizeof(char))
#define SE_SAFE_FREE(x)\
do {\
if(NULL != x) { \
free(x); x = NULL; \
} \
} while (0)
#define SE_SAFE_DBCLOSE(x)\
do {\
if(NULL != x) { \
PQfinish(x); x = NULL; \
} \
} while (0)
const char* getPGPingName(PGPing val
) {
switch (val
) {
case PQPING_OK
: return "PQPING_OK";
case PQPING_REJECT
: return "PQPING_REJECT";
case PQPING_NO_RESPONSE
: return "PQPING_NO_RESPONSE";
case PQPING_NO_ATTEMPT
: return "PQPING_NO_ATTEMPT";
default:return"UNKNOWN";
}
}
int main() {
PGconn
*conn
= NULL;
PGPing result
= PQPING_OK
;
char **keys
= NULL, *tmpKeys
;
char **vals
= NULL, *tmpVals
;
size_t arrHeadSize
= (sizeof(char*) * SE_LIBPQPARAM_COUNT
) + sizeof(char*);
keys
= (char **)malloc(arrHeadSize
+ (SE_LIBPQPARAM_COUNT
* SE_LIBPQKEY_MAX_MEMLEN
));
if (NULL == keys
)
exit(-1);
vals
= (char **)malloc(arrHeadSize
+ (SE_LIBPQPARAM_COUNT
* SE_LIBPQVALUE_MAX_MEMLEN
));
if (NULL == vals
) {
SE_SAFE_FREE(keys
);
exit(-1);
}
tmpKeys
= (char *)keys
+ arrHeadSize
;
tmpVals
= (char *)vals
+ arrHeadSize
;
for (int i
= 0; i
< SE_LIBPQPARAM_COUNT
; ++i
) {
keys
[i
] = tmpKeys
;
tmpKeys
+= SE_LIBPQKEY_MAX_MEMLEN
;
vals
[i
] = tmpVals
;
tmpVals
+= SE_LIBPQVALUE_MAX_MEMLEN
;
}
keys
[SE_LIBPQPARAM_COUNT
-1] = NULL;
vals
[SE_LIBPQPARAM_COUNT
-1] = NULL;
strncpy(keys
[0], "hostaddr", SE_LIBPQKEY_MAX_MEMLEN
);
strncpy(keys
[1], "port", SE_LIBPQKEY_MAX_MEMLEN
);
strncpy(keys
[2], "dbname", SE_LIBPQKEY_MAX_MEMLEN
);
strncpy(keys
[3], "user", SE_LIBPQKEY_MAX_MEMLEN
);
strncpy(keys
[4], "password", SE_LIBPQKEY_MAX_MEMLEN
);
strncpy(keys
[5], "connect_timeout", SE_LIBPQKEY_MAX_MEMLEN
);
strncpy(keys
[6], "client_encoding", SE_LIBPQKEY_MAX_MEMLEN
);
strncpy(keys
[7], "application_name", SE_LIBPQKEY_MAX_MEMLEN
);
strncpy(vals
[0], "192.168.1.252", SE_LIBPQVALUE_MAX_MEMLEN
);
strncpy(vals
[1], "5432", SE_LIBPQVALUE_MAX_MEMLEN
);
strncpy(vals
[2], "数据库名", SE_LIBPQVALUE_MAX_MEMLEN
);
strncpy(vals
[3], "用户名", SE_LIBPQVALUE_MAX_MEMLEN
);
strncpy(vals
[4], "密码", SE_LIBPQVALUE_MAX_MEMLEN
);
strncpy(vals
[5], "10", SE_LIBPQVALUE_MAX_MEMLEN
);
strncpy(vals
[6], "GBK", SE_LIBPQVALUE_MAX_MEMLEN
);
strncpy(vals
[7], "libpq12345678915", SE_LIBPQVALUE_MAX_MEMLEN
);
for (int i
= 0; i
< SE_LIBPQPARAM_COUNT
; ++i
)
printf("%s:%s\n", keys
[i
], vals
[i
]);
result
= PQpingParams(keys
, vals
, 1);
printf("连接状态:%s(%d)\n", getPGPingName(result
), result
);
conn
= PQconnectdbParams(keys
, vals
, 1);
if (NULL == conn
) {
SE_SAFE_FREE(keys
);
SE_SAFE_FREE(vals
);
exit(-1);
}
SE_SAFE_DBCLOSE(conn
);
SE_SAFE_FREE(keys
);
SE_SAFE_FREE(vals
);
return 0;
}
转载请注明原文地址: https://www.6miu.com/read-5034113.html