select函数分析
select函数格式
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
- 参数说明:
- nfds:为所监控文件描述符集的最大长度加1
- readfds: 指定的读操作监控集
- writefds:指定的写操作监控集
- exceptfds:忽略监控的文件描述符集
- timeout: 函数的超时时限。当设置为NULL,则说明还是一直等待直到有一个文件描述符的状态改变
注意:timeout 对于linux系统,此参数没有const限制,每次select调用完毕timeout的值都被修改为剩余时间,
而unix系统则不会改变timeout值(网上处理的注意说明)
- 返回值说明:
- 执行成功返回监控集中有操作请求的文件描述符的个数,失败则返回-1,并设置全局错误变量errno
根据例子判断select
函数能否使用到oracle连接上面
- 两个例子,一个打开标准输入输出,一个为
int open(const char * pathname, int oflag,....)
// 打开成功,返回打开文件的文件描述符,否则返回-1
int socket(int domian, int type, int protocol )
// 函数执行成功,返回一个socket描述符,失败则返回-1
occi连接数据库过程没有int句柄
- 不使用连接池的情况
Environment *env = Environment::createEnvironment();
Connection *conn = env->createConnection(username,password,connstring);
Statement *stmt = conn->createStatement();
string sql = "select MIN(ID), MAX(ID) from tablename";
stmt->setSQL(sql); // 没有返回值 "void setSQL(const string &sql)"
ResultSet *rs = stmt->executeQuery(); // 返回结果集
+ 使用连接池的情况
Environment *env = Environment::createEnvironment();
ConnectionPool *connPool = env->createConnectionPool(username,password,connstring,3,5,2);
Connection *conn = connPool->createConnection(username,password);
Statement *stmt = conn->createStatement();
string sql = "select MIN(ID), MAX(ID) from tablename";
stmt->setSQL(sql); // 没有返回值 "void setSQL(const string &sql)"
ResultSet *rs = stmt->executeQuery(); // 返回结果集