在AnySQL.net中搜索标签(Tags) 'C' 的结果:
用C取得Linux负荷值?
oramon程序可以记录Oracle数据库的很多运行特征, 但还是需要记录一些OS级别的值, 最想要的是Load Average的三个值了, 另外还有CPU的利用率了. 在Solaris下可以用kstat库来取得这些值, 在AIX下可以用perfstat库的函数, 来搞定这些值. 但是在Linux上, 虽然说它是开源的, 但却没有搞定这几个值如何用C程序取出来的. 用了最土的方法, 现在用的Linux基本上都是Kernel 2.4以上的了, 取得Load Average的话, 就直接访问"/proc/loadavg"算了. float getloadavg1m() { FILE *fp=NULL; char tmpbuf[128]; if ((fp=fopen("/proc/loadavg","r"))!=NULL) { fscanf(fp,"%s",tempbuf); ...
AIX下C语言取得Load值
在AIX下可以用libperfstat包来方便地取得Load Average的三个值. #include <stdio.h> #include <sys/time.h> #include <sys/proc.h> #include <libperfstat.h> int main(int argc, char *argv[]) { perfstat_cpu_total_t cpu_total_buffer; perfstat_cpu_total(NULL, &cpu_total_buffer, sizeof(perfstat_cpu_total_t), 1); while(1 == 1) { sleep(10);...
AUL工具的源代码有多少行?
今天比较好奇地统计了一下AUL源代码的行数, 想想自已这三年以来为这个软件写了多少行代码, 发现并没有我想象的那么多. 以为早到了一万行了, 原来还差一些. DMP格式文件的接口部分. C:\mydul-b5>wc -l dmpfile.* 245 dmpfile.c 41 dmpfile.h 286 total 解释Oracle块格式的部分. C:\mydul-b5>wc -l block.* 5795 block.c 438 block.h 6233 total AUL命令行软件部份. C:\mydul-b5>wc -l mydul.*...
终于找到POSIX Thread挂起的原因了
昨天跑的Thread程序还是停住了, 原因是不能再创建新的线程了, 返回错误代码11, 表示达到了最大能创建的线程数了. 一开始很不明白, 因为就我这个程序, 应当只会有一个线程在去行, 不可能多个. 于是我检查了一下进程占用的内存, 居然高达132MB, 因此是系统资源到了最大限制了(POSIX对最多进程数的限制). 于是我想起了当初用fork/vfork时, 因为没有加入一行代码, 导致了进程结束后, 系统并没有自动回收占用的有关资源, 因此线程可能也遇到了同样的问题. 经过一翻网上搜索, 终于明白了其中的道理. 创建线程时可以指定很多的属性, 如可Join的线程或者是自动Detach的线程, 默认是可Join的. 在系统中有一个定长数组, 存放了历来创建线的线程的信息, 可Join的线程虽然运行结束了, 但是资源不会回收, 要等主进程来检查, 因此线程创建多了, 这个数据全都满了, 所以不能再创建线了. 在大部份程中, 主进程创建了几个子进程后, 就调用pthread_join方法来等所有的子线程结束, 这时就相当于主进程去检查这个数据,...
从OCIThread回到POSIX Thread编程模式
我要实现的任务其实很简单, 就是想要每隔一定的时间去数据库中获得一些信息, 获得这些信息可能需要运行八到十个SQL语句, 随着数据库上的连接数, 负荷等的不同, 这些查询所需要的时间是不一定的, 有可能十分之一秒就可以返回, 也可能要几秒. 但是我想要的是以固定的间隔打印出这些数据. 于是我就想了一个主进程, 隔一定的时间去产生一个线程, 由线程去执行这些SQL语句, 打印出信息, 这样可以保证时间是很均匀的. 于是我就从fork到vfork, 再到thread(Solaris), 再到pthread(Solaris和Linux), 然后再到OCIThread. 上了OCIThread后, 还有程序挂起的情况发生, 因此并没有解决我想要解决的问题, 一开始是用自已的变量来防止并行执行OCI调用, 后来改成OCIThreadMutex, 还是一样, 并且发现OCIThread后, 服务器端的Oracle后台进程的CPU消耗要比普通方式高出20%左右, 因此OCIThread并没有优势. 于是退出到了POSIX的线程调用, 这次用了上POSIX上的Mutex. 程序还在测试, 以前用多线程方式时, 总是12小时左右, 整个程序就挂起了. 现在分成两路来测试,...
切换到OCIThread多线程编程环境
多线程的事困扰我好久了, 最初用fork遇到了进程间数据共享的问题, 改成vfork则主进程要等子进程结束后才继续. 后成改成用POSIX的线程(pthread)来写, 结果跑了一天, 我的OCI程序挂起了, 原因是遇到了一个Bug. 今天在网上搜索后发OCIThread, 就是Oracle包装了一层之后的多线程编程环境了. 将程序改了一下, 希望周一来时它没有挂住. OCIThread要求在其他的OCIThread调用之前先执行如下调用: OCIThreadProcessInit(); 然后以OCI_THREADED方式创建OCIEnv对象, 并执行OCIThread初始化: OCIThreadInit(seshp,errhp); 接下来就可以创建OCI线程了, 使用下面的调用: OCIThreadCreate(seshp, errhp, mycall, (dvoid *)param, NULL,NULL); 当被调用的函数执行完后, 线程就自动退出了. 当然在断开连接之前得结束OCIThread, 执行如下调用: OCIThreadTerm(seshp,errhp); ...
Unix/Linux下C语言POSIX多线程程序示例
原想用fork机制来实现多个任务并发的, 结果始终没有搞定其中的数据共享问题, 就换成用POSIX线程算了. #include <pthread.h> #include <stdio.h> void *subCall(void *param) { int *p = param; (*p) ++; return NULL; } int main() { int i, *p=NULL; int err; pthread_t pid; p = (int *)...
Unix/Linux上C语言fork多个进程的代码示例
下面一段代码算是一个完整的例子了, 纪念一下. #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { pid_t pid; /* Remove the defunc pid in process table */ signal(SIGCLD, SIG_IGN); while(true) { switch(pid=fork()) { case -1: ...
Windows Visual C++多线程(Thread)编程示例
以前总以为用C来编写多线程序是一件很难的事, 但事实上并不是很复杂, 下面就是今天参考网上例子写出来的一段程序. #include <process.h> #include <stdio.h> #include <stdlib.h> void Child( void* pParams ) { char *data = (char *) pParams; printf("Child first (%s) !\n", data); _endthread(); } int main( void ) { ...
再见了, Java语言!
几年以前, 曾经喜欢用Java写编写程序. 历时最长的一个程序是用Java写的数据库交互工具 -- AnySQL. 使用JDBC, 可以连接很多不同的关系数据库, 这是名字中的SQL这几个字段的来源. 又因为用Java写成, 可以运行在不同的操作和硬件平台上, 这是Any这几个字母的来源, 也为了宣传这个工具, 所以申请了AnySQL.net这个网址. 可现在我已经很少再对这个工具作修改了, 也很少再用Java来写工具了, 转向了C及Perl, 个人站点上的内容也不光是这个用Java写成的工具了, 事实上, 它所占的比重已经非常少了. 因此我个人和Java说, 再见了! 这个断断续续维护了2年多时间的程序, 曾经让我对Java很有感情, 为了一个图形界面, 从AWT研究到SWing, 最后到Eclipse项目组搞出来的SWT. 可是, 当我两年前开始写MyDUL时, 发现Java是多么地不适合, 为了一个小小的程序, 必须要装一个越来越大的JRE环境, 而且可以很方便地使用反编译工具生成可读性很好的源代码, 于是我转向了C语言. 当我在工作中要写一些工具时, 发现Java是多么地不适合于作文本处理, 不适合和OS打交道,...
我使用的OCI编译环境, 基于Visual C++ 6.0
以前常用Java来写工具, 后来觉得Java要还一个JRE, 有些不爽的地方, 也存在性能问题. 由于在Java程序上积累了一些经验, 转到C来写一些小工具也不是难事, 他们两者语法基本相同. 况且写工具时编译代码只占用了很小的时间, 大部分时间在想应当具有什么功能? 我写OCI的环境很小, 基本的编译环境是从VC6中拷出一些最基本的文件, 加上OCI的头文件和库文件构成的, 压缩后不到4M, 你可以下载并解压到C盘, 但不支持C++了. 接下来需要设置两个环境变量, 指定默认的头文件(.H)的位置和默认的库文件(.LIB)的位置, 如下所示: INCLUDE=c:\vc6\include LIB=c:\vc6\lib 接下来将Bin目录加到PATH变量中, 你就可以用下面的语法来编译OCI程序了. 如下所示: cl /ML ociuldr.c oci.lib 这样就编译成了我网站上提供的ociuldr工具了, Microsoft不会来追究我非法传播VC6吧?...
修改rsync中TCP Socket的SNDBUF和RCVBUF的大小
rsync 2.6.8中的"--sockopts"并不能真正起作用, 所以只有自已改了. 在sender.c中加上如下红色部分代码: if (is_a_socket(f_out)) { set_socket_options(f_out, "SO_SNDBUF=524288"); set_socket_options(f_out, "SO_RCVBUF=524288"); if (verbose) { int sndbuf,rcvbuf,len; len = sizeof(sndbuf); getsockopt(f_out, SOL_SOCKET, SO_SNDBUF,&sndbuf, &len); len = sizeof(rcvbuf); getsockopt(f_out, SOL_SOCKET, SO_RCVBUF,&rcvbuf,...
MS VC中如何调用其他DLL中的函数?
用下面的命令看在oracommon10.dll中有那些函数是可以调用的: C:\TEMP> dumpbin /EXPORTS oracommon10.dll ordinal hint RVA name 1 0 000C37C4 DBMSBKRS 2 1 000012C0 OCITypeCollExtTypeCode ...... 65 40 00005FD0 kcbhxoro ...... 接下来远择你需要的函数, 比如kcbhxoro函数, 编辑一个oracommon.def文件: EXPORTS kcbhxoro @ 65 ...... 然后用LIB命令来生成一个oracommon.lib文件, 这个文件在编译时需要用到:...
如何去掉rsync 2.6.8对iconv库的调用?
最近rsync (2.6.5)遇到了几次拷贝大文件(8GB)挂起(发起拷贝命令的程序不肯退出)的情况, 于是在网上找新版本, 在2.6.8版本的Bug修复列表中找到了一些和这个有关的修正(也不确定), 于是下载了源代码来自已编译, 希望可以解决我们遇到的问题. 在编译过程中, 遇到了iconv包的问题, 在2.6.8中引入了一些新功能(还不清楚), 需要用到字符集转换包(iconv)的库, 我们有很多的机器上都没有装这些包, 因此要去掉对这个包的调用, 让rsync程序拷贝到目标机器就可以运行, 下面是移除的步骤: 1, 在configure程序中将iconv.h改成iconv1.h for ac_header in sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \ unistd.h utime.h grp.h compat.h sys/param.h ctype.h sys/wait.h \ sys/ioctl.h...
用C来读取Solaris上的Load Average的三个值
OS中的Load Average是很有用的信息,在原先的版本中是没有的,今日增加了这个信息. ...... OS Load: 2.37 2.56 2.56 ...... 有了这些信息后,可以使这些工具更具有价值. 源程序来自这儿, 在这儿我也抄了一份....
解决Linux/Unix下OCI程序动态库版本的问题.
这段时间做了好几个基础OCI的程序,在Windows上编译后,不需要重新编译, 就可以适应8i/9i/10g的客户端,但在Linux/Unix上,编译好后到不同的版本的客户端去运行时, 总会提示找不到动态库libclntsh.., 这时可以用以下办法去解决: 第一步,修改genclntsh文件,这个文件在Oracle的bin目录下 # # Library names and locations CLNT_NAM=clntsh # (short) library name CLNT_VER=9.0 ...
站内搜索 | Search
总数: 526 | 留言: 1642
- Name: Fangxin Lou
- MSN: anysql©live.com
- Mail:anysql©yahoo.com
anysql©gmail.com - Skype: anysql
- AIM: loufangxin
- Mobile:008615925611590
分类 | Categories
软件下载:
MSN: loufangxin(a)msn.com, Mail: anysql(at)126.com/support(at)iamdba.com, Skype ID:anysql