Proc例程

合集下载

proc编程(proc_create_data)

proc编程(proc_create_data)

proc编程(proc_create_data)proc_create_data函数:创建proc虚拟文件系统文件函数原型:static inline struct proc_dir_entry *proc_create_data(const char *name,mode_tmode, struct proc_dir_entry *parent,conststruct file_operations *proc_fops, void *data){return NULL;}参数1:name为你要建立的文件参数2:mode为建立的文件所拥有的读写等权限参数3:parent为你要在哪个文件夹下建立名字为name的文件,如:init_net.proc_net是要在/proc/net/下建立文件参数4:proc_fops为struct file_operations *指针参数5:data保存似有数据的指针,如不要为NULLtest_main.c:#include#include#include#include#include#include#include#include#includeMODULE_LICENSE("GPL");struct_DATA_INFO{int data1;int data2;};static struct_DATA_INFO data_info[2];/* PROC stuff */static void*dl_seq_start(struct seq_file*s,loff_t*pos){static unsigned long counter=0;if(*pos==0){return&counter}else{*pos=0;return NULL;}}static void*dl_seq_next(struct seq_file*s,void*v,loff_t*pos) {return NULL;}static void dl_seq_stop(struct seq_file*s,void*v){}static int dl_seq_show(struct seq_file*s,void*v){struct proc_dir_entry*pde=s->private;struct_DATA_INFO*info=pde->data;seq_printf(s,"%d----%d",info->data1,info->data2); return0;}static struct seq_operations dl_seq_ops={.start=dl_seq_start,.next=dl_seq_next,.stop=dl_seq_stop,.show=dl_seq_show};static int dl_proc_open(struct inode*inode,struct file*file) {int ret=seq_open(file,&dl_seq_ops);if(!ret){struct seq_file*sf=file->private_data;sf->private=PDE(inode);}return ret;}static const struct file_operations dl_file_ops={.owner=THIS_MODULE,.open=dl_proc_open,.read=seq_read,.llseek=seq_lseek,.release=seq_release};void init_mem(void){data_info[0].inflow=1;data_info[0].upflow=2;proc_create_data("proc_test1",0,init_net.proc_net,&dl_file_o ps ,&data_info[0]);data_info[1].inflow=3;data_info[1].upflow=4;proc_create_data("proc_test2",0,init_net.proc_net,&dl_file_o ps ,&data_info[1]);}static int__init init_mem_pool(void){init_mem();return0;}static void__exit exit_mem_pool(void){remove_proc_entry("proc_test1",init_net.proc_net);remove_proc_entry("proc_test2",init_net.proc_net);}module_init(init_mem_pool);module_exit(exit_mem_pool);Makefile:TARGET=test_mainCURRENT=$(shell uname-r)KDIR=/lib/modules/$(CURRENT)/buildPWD=$(shell pwd)CF=*.o.*o.d.*.cmd.*.flags*.mod.c Module.*modules.*.tmp_* obj-m:=$(TARGET).odefault:make-C$(KDIR)SUBDIRS=$(PWD)modulesclean:-rm-rf$(CF)-include$(KDIR)/Rules.make运行:insmod test_main.kocat/proc/net/proc_test1cat/proc/net/proc_test2 可以看到不同的值。

procise开发流程

procise开发流程

procise开发流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!软件开发流程一、需求分析1. 确定项目目标和范围:明确项目的目标、功能和性能要求,以及项目的边界和限制。

程序的三种基本控制结构

程序的三种基本控制结构

程序的三种基本控制结构顺序结构选择结构循环结构一、顺序结构:顺序语句由语句序列组成,程序执行时,按照语句的顺序,从上而下,一条一条地顺序执行如:store 'Visual FoxPro' to nameAge = 4'My name is ' + name + ', I am ' ;+ str(Age) + ' years old'二、选择结构:分支语句根据一定的条件决定执行哪一部分的语句序列。

1、单分支结构格式:if<条件><语句序列>endif例程1:clearuse sbwait ‘是否打印?(y/n)’to aif upper(a)=’Y’wait ‘请接好打印机!按任意键后打印’list to printendif2、双分支选择格式:if<条件><语句序列1>else<语句序列2>endif例程2:clearset talk offaccept ‘请输入密码:’ to mmif mm<>’abc’’你无权使用本系统’quitelse’欢迎使用本系统’endifset talk onif语句的嵌套:在一个if语句中包含另一个语句的程序结构例程3:根据输入的x值,计算下面分段函数的值,并显示结果。

2x-5 (x<1)Y=2x (1<=x<10)2x+5 (x>=10)input ‘请输入x的值:’to xif x<1y=2*x-5elseif x<10y=2*xelsey=2*x+5endifendif?’分段函数的值为’+str(y)3、多分支结构格式:DO CASECASE 〈逻辑表达式1〉〈语句组1〉CASE 〈逻辑表达式2〉〈语句组2〉…CASE 〈逻辑表达式n〉〈语句组n〉[OTHERWISE]〈语句组〉ENDCASE3 / 35例程4:输入某学生成绩,并判断其成绩等级:100-90分为优秀,89-80分为良好,79-70分为中等,69-60分为差,60分以下为不及格。

tcl define_proc用法

tcl define_proc用法

tcl define_proc用法
在Tcl中,`define`不是一个内置的关键字,而是使用命令定义过程的语言。

其中,`proc`命令用于定义一个过程,该过程可以被其他程序或脚本调用。

`proc`命令有多种参数,其中包括过程的名称、输入参数和过程体。

例如,可以使用以下代码定义一个名为"hello"的过程:
```tcl
proc hello {} {puts "Hello, Tcl! "}
```
然后,可以使用"hello"命令调用该过程,以便在命令行中打印出"Hello, Tcl! "。

通过定义和调用多个过程,可以组织Tcl脚本并实现所需的功能,从而编写模块化、可重用的代码。

此外,`define_proc`是Tcl过程定义的一种形式,允许在过程定义中设置一些属性。

这些属性可以包括过程的名称、参数、返回类型和其他信息。

通过使用`define_proc`,可以更精确地控制过程的行为和功能。

proc函数

proc函数

proc函数
Proc函数是编程中常用的一个概念,它通常表示"process",即进程。

在计算机科学中,进程是程序的执行实例,是操作系统进行资源分配和调度的基本单位。

而在编程中,proc函数则是用来定义过程或函数的一种方式。

在很多编程语言中,proc函数被用来定义一个具体的操作或过程,以便在程序中被调用。

通过proc函数,程序员可以将一系列操作封装成一个函数,提高代码的可读性和可维护性。

通过调用proc函数,程序可以更加高效地完成一些特定的任务,同时也可以减少代码的重复性。

使用proc函数可以将程序分解成多个模块,每个模块实现特定的功能,这样不仅提高了代码的复用性,也方便了代码的维护和调试。

通过合理地使用proc函数,程序员可以更加高效地完成复杂的任务,提高编程效率。

proc函数也可以用来实现回调函数,即将一个函数作为参数传递给另一个函数,在适当的时候调用。

这种方式可以实现代码的灵活性和扩展性,使程序更加健壮和易于扩展。

总的来说,proc函数在编程中起着非常重要的作用。

它不仅可以提高代码的复用性和可维护性,还可以实现程序的模块化和灵活性。

因此,程序员在编程时应该充分利用proc函数,合理地设计程序结
构,以提高程序的质量和效率。

proc_create的用法

proc_create的用法

proc_create的用法proc_create是一个常用的PHP函数,用于创建新的进程或子进程。

它允许你在PHP脚本中执行外部命令或脚本,并在需要时创建新的进程来处理任务。

下面是proc_create的用法介绍。

一、函数定义proc_create() 函数用于创建新的进程。

它接受一个字符串数组作为参数,其中每个字符串表示要执行的命令或脚本的名称和参数。

二、用法示例下面是一个使用 proc_create() 函数的示例:```php$command = array("command", "arg1", "arg2");$process = proc_create($command);```在上面的示例中,我们使用了一个包含三个参数的命令数组 `$command`,并将它传递给 proc_create() 函数。

该函数将创建一个新的进程来执行这些命令。

三、选项参数proc_create() 函数还接受一些可选参数,用于控制进程的执行方式。

以下是一些常用的选项:* `stdout`:指定进程的标准输出文件句柄。

默认为标准输出(STDOUT)。

* `stderr`:指定进程的标准错误输出文件句柄。

默认为标准错误(STDERR)。

* `stdin`:指定进程的标准输入文件句柄。

默认为标准输入(STDIN)。

* `timeout`:指定进程的超时时间(以秒为单位)。

如果进程在超时时间内未完成,则会被强制终止。

* `cwd`:设置进程的工作目录。

* `env`:设置进程的环境变量。

* `suppress_output`:指定是否抑制进程的标准输出和标准错误输出。

默认为 false,即输出会被发送到标准输出和标准错误输出。

以下是一个使用这些选项的示例:```php$command = array("command", "arg1", "arg2");$options = array("stdout" => "/dev/null", "stderr" => "/dev/null"); // 将标准输出和标准错误输出重定向到 /dev/null$process = proc_create($command, null, null, null, null, $options);```在上面的示例中,我们将进程的标准输出和标准错误输出重定向到了`/dev/null`,以抑制它们的输出。

达芬奇pro 正点原子 例程

达芬奇pro 正点原子 例程

达芬奇pro 正点原子例程序号一:序言达芬奇pro 正点原子例程是一款开放式的软件,旨在为使用达芬奇pro开发板的开发者提供一套便捷实用的例程,帮助开发者更加高效地进行开发和调试。

通过使用这些例程,开发者可以快速理解达芬奇pro开发板的功能和使用方法,并且可以基于这些例程进行二次开发,满足自己的特定需求。

序号二:特点1.包含丰富的功能模块:达芬奇pro 正点原子例程涵盖了常用的实用功能模块,如LED灯控制、蜂鸣器控制、按键输入、串口通信等,这些模块可以为开发者提供丰富的参考和基础功能实现,节省开发时间。

2.易于理解和使用:例程的代码结构清晰,注释详细,使用了简洁易懂的命名规范,方便开发者快速理解和使用。

即便是对于初学者来说,通过阅读例程代码也可以轻松入门。

3.支持二次开发:例程的代码设计考虑了可扩展性和灵活性,开发者可以在此基础上进行二次开发,完全按照自己的需求进行修改和扩展,使得例程更贴合实际项目需求。

序号三:使用方法1.下载安装开发环境:开发者需要下载并安装达芬奇pro开发板所需的开发环境,如Keil、IAR等。

2.下载示例代码:开发者可以在冠方全球信息站上下载到达芬奇pro正点原子例程的示例代码,也可以通过源代码管理工具从代码仓库中获取最新代码。

3.调试运行:将下载到的示例代码导入开发环境中,连接达芬奇pro开发板,编译并下载代码到开发板中,即可进行调试和运行。

4.二次开发:如有需要,开发者可以根据自己的需求对示例代码进行二次开发,修改和扩展已有功能,或者添加新的功能模块。

序号四:实际应用达芬奇pro 正点原子例程可以广泛应用于各种嵌入式系统开发项目中,如智能家居、物联网、工业控制等领域。

开发者可以通过这些例程,快速实现各种功能,加速产品开发周期,并提高软件质量和稳定性。

序号五:总结达芬奇pro 正点原子例程是一款功能丰富、易于理解和使用、支持二次开发的开发工具,为使用达芬奇pro开发板的开发者提供了便捷的开发解决方案。

课题_proc增加节点的一个例子

课题_proc增加节点的一个例子

proc增加节点的一个例子procfs作为linux的一种伪文件系统,主要用于内核与用户层交换信息;在linux中的/proc就是作为procfs使用,该目录下面有cpu,mtd,gio等固有的节点等,如果用cat命令去查看这些文件,就能够看到这些文件所代表设备的相关信息;同时procfs也可以提供给用户层写的操作,只要在相关文件驱动中支持就可以;下面是一个简单的添加一个proc节点的例子,【环境】内核用的是TI的2.6.37_IPNC_DM365_4.0.0【Makefile】#TARGET = cmemk.koobj-m += myproc.oLINUXKERNEL_INSTALL_DIR = /home/mao/workroom/build_for_nand/psp/trunk/ipnc_psp_03_21_00_04/ti-davinciMAKE_ENV = ARCH=arm CROSS_COMPILE=arm_v5t_le-debug: EXTRA_CFLAGS += -D__DEBUG.PHONY: clean debug release install defaultdefault: debugdocs:release:make -C $(LINUXKERNEL_INSTALL_DIR) M=`pwd` $(MAKE_ENV) \EXTRA_CFLAGS="$(EXTRA_CFLAGS)"debug:make -C $(LINUXKERNEL_INSTALL_DIR) M=`pwd` $(MAKE_ENV) \EXTRA_CFLAGS="$(EXTRA_CFLAGS)" modulesinstall:install -d $(EXEC_DIR)clean:-rm -rf *.o *mod* *.ko .cmem* .tmp*【源码】#include <linux/module.h>#include <linux/moduleparam.h>#include <linux/kernel.h>#include <linux/timer.h>#include <linux/string.h>#include <linux/slab.h>#include <linux/blkdev.h>#include <linux/delay.h>#include <linux/init.h>#include <linux/completion.h>#include <linux/unistd.h>#include <linux/spinlock.h>#include <linux/kmod.h>#include <linux/interrupt.h>#include <linux/notifier.h>#include <linux/cpu.h>#include <linux/mutex.h>#include <linux/proc_fs.h>#define procfs_name "helloworld"/*** This structure hold information about the /proc file**/struct proc_dir_entry *Our_Proc_File;/* Put data into the proc fs file.** Arguments* =========* 1. The buffer where the data is to be inserted, if* you decide to use it.* 2. A pointer to a pointer to characters. This is* useful if you don't want to use the buffer* allocated by the kernel.* 3. The current position in the file* 4. The size of the buffer in the first argument.* 5. Write a "1" here to indicate EOF.* 6. A pointer to data (useful in case one common* read for multiple /proc/... entries)** Usage and Return Value* ======================* A return value of zero means you have no further* information at this time (end of file). A negative* return value is an error condition.** For More Information* ====================* The way I discovered what to do with this function* wasn't by reading documentation, but by reading the* code which used it. I just looked to see what uses* the get_info field of proc_dir_entry struct (I used a* combination of find and grep, if you're interested),* and I saw that it is used in <kernel source* directory>/fs/proc/array.c.** If something is unknown about the kernel, this is* usually the way to go. In Linux we have the great* advantage of having the kernel source code for* free - use it.*/intprocfile_read(char *buffer,char **buffer_location,off_t offset, int buffer_length, int *eof, void *data){int ret;printk(KERN_INFO "procfile_read (/proc/%s) called\n", procfs_name);/** We give all of our information in one go, so if the* user asks us if we have more information the* answer should always be no.** This is important because the standard read* function from the library would continue to issue* the read system call until the kernel replies* that it has no more information, or until its* buffer is filled.*/if (offset > 0) {/* we have finished to read, return 0 */ret = 0;} else {/* fill the buffer, return the buffer size */ret = sprintf(buffer, "HelloWorld!\n");}return ret;}int init_module(){Our_Proc_File = create_proc_entry(procfs_name, 0644, NULL);if (Our_Proc_File == NULL) {remove_proc_entry(procfs_name, NULL);printk(KERN_ALERT "Error: Could not initialize /proc/%s\n", procfs_name);return -ENOMEM;}Our_Proc_File->read_proc = procfile_read;//Our_Proc_File->owner = THIS_MODULE;Our_Proc_File->mode = S_IFREG | S_IRUGO;Our_Proc_File->uid = 0;Our_Proc_File->gid = 0;Our_Proc_File->size = 37;printk(KERN_INFO "/proc/%s created\n", procfs_name); return 0; /* everything is ok */}void cleanup_module(){remove_proc_entry(procfs_name, NULL);printk(KERN_INFO "/proc/%s removed\n", procfs_name);}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Pro*C/C++程式PROC是ORACLE数据库提供的编程接口之一,其应用十分的广泛,本文通过一个具体的例子,介绍PROC编程的一些经验及应注意的地方。

例子程式:EXEC SQL INCLUDE sqlca;/*RELEASE_CURSOR=YES 使PROC 在执行完后释放和嵌入SQL有关资源*/EXEC ORACLE OPTION (RELEASE_CURSOR = YES);EXEC SQL BEGIN DECLARE SECTION;varchar vc_user[20];long al_empno=0;char ac_ename[11]="";char ac_hiredate[20]="";double af_sal=0;EXEC SQL VAR ac_ename IS STRING(11);EXEC SQL VAR ac_hiredate IS STRING(20);EXEC SQL END DECLARE SECTION;/*错误处理函数*/void sql_error(char *msg){printf("\n%s,%ld,%s\n", msg,sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);EXEC SQL ROLLBACK RELEASE;exit(-1);}main(){EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE ERROR: ");/*连接数据库*/strcpy(vc_user.arr,"scott/tiger@DEMO");vc_user.len=16;exec sql connect :vc_user;EXEC SQL DECLARE cur_emp CURSOR FORSELECT EMPNO, ENAME,to_char(HIREDATE,’yyyy/mm/dd hh24:mi:ss’),SAL FROM EMP;EXEC SQL OPEN cur_emp;while(1){al_empno=0;strcpy(ac_ename,"");strcpy(ac_hiredate,"");af_sal=0;EXEC SQL FETCH cur_emp INTO :al_empno, :ac_ename:ename_ind, :ac_hiredate:hiredate_ind, :af_sal:sal_ind;if( sqlca.sqlcode == 1403){break;}printf("empno=%ld,ename=%s,hiredate=%s,sal=%lf\n",al_empno,ac_ename,ac_hiredate,af_sal);}EXEC SQL CLOSE cur_emp;EXEC SQL ROLLBACK WORK RELEASE;}1、宿主变量的声明在PROC中,在SQL语句中用到的变量称为宿主变量。

他们应在EXEC SQL BEGIN DECLARE SECTION;和EXEC SQL EDN DECLARE SECTION;之间声明,如上面所示.在声明宿主变量时应注意以下几点:(1) 在数据库表中定义为VARCHAR2,VARCHAR,CHAR的字段,在PROC中可声明为CHAR,但长度应为他们在表中定义的长度加1,因为PROC中CHAR型变量用\0做结尾。

如:ENAME在表中的定义为ename varchar2(10),在PROC中可定义为:EXEC SQL BEGIN DECLARE SECTION;char ename[11];EXEC SQL END DECLARE SECTION;常见错误说明:如果插入的字符串长度大于10,如:EXEC SQL INSERT INTO EMP(ENAME) VALUES(’12345678901’);会出现以下错误:error:ORA-01480: STR 赋值变量缺少空后缀。

如果定义为:EXEC SQL BEGIN DECLARE SECTION;char ename[15];EXEC SQL END DECLARE SECTION;当插入的字符串长度大于10,小于15时,如:EXEC SQL INSERT INTO EMP(ENAME) VALUES(’12345678901’);会出现以下错误:error:ORA-01401: 插入的值对于列过大。

当插入的字符串长度大于15,如:EXEC SQL INSERT INTO EMP(ENAME) VALUES(’12345678901234’);会出现以下错误: bitsCN_comerror:ORA-01401:STR 赋值变量缺少空后缀。

(2) 从SQL语句中取字段的值到宿主变量中时,PROC不会自动给宿主变量去掉右空格。

而是以在DECLARE SECTION 中定义的长度为准(和表中定义的无关)不足补右空格.如果不注意这一点,在PROC中进行字符串操作时(如比较相等)会出错。

如:EXEC SQL BEGIN DECLARE SECTION;char ename[10];EXEC SQL END DECLARE SECTION;如果ENAME在表中的值为’abc’,则取出的值为’abc ’;可用语句EXEC SQL VAR重定义CHAR型变量。

这样宿主变量会自动去掉右空格。

如下: EXEC SQL BEGIN DECLARE SECTION;char ename[11];EXEC SQL VAR ac_ename IS STRING(11);EXEC SQL END DECLARE SECTION;如果ENAME在表中的值为’abc’,则取出的值为’abc’;(3) 对浮点型的变量,为确保精度,最佳是声明成DOUBLE型的.因为DOUBLE型的精度比FLOAT型高非常多.(4) 整型可声明为LONG型(对较长的整型,而且所用的平台支持的话,如在SUN平台上,可声明为LONG LONG型).(5) DATE型的处理:DATE型一般声明为CHAR(20)。

往表中插入DATE型数据时,一般用TO_DATE()函数进行类型转换,取出值时一般用TO_CHAR()函数进行类型转换. 网管软件下载EXEC SQL select to_char(hiredate,’yyyy/mm/dd hh24:mi:ss’) into :ac_hire_date from EMP where empno=1234;EXEC SQL insert into EMP(EMPNO,HIREDATE) values(123,to_date(:ac_hiredate,’yyyy/mm/dd hh24:mi:ss’);2、宿主变量的作用范围如果宿主变量在所有的函数之外声明,则他们是全局变量。

在使用之前要注意把变量的值初始化,宿主变量也能在某个函数的内部定义。

这时他们是局部变量。

一般都习惯把宿主变量声明为全局变量。

3、数据库的连接和断开数据库的连接有以下两种方法:(1)strcpy(vc_user.arr,"scott/tiger");vc_user.len=11;exec sql connect :vc_user;(2)strcpy(user,"scott");strcpy(pass,"tiger");exec sql connect :user identified by :pass;注意:在有些平台上两种都能,在有些平台上只能用第一种方法.在PROC程式中,要记住用EXEC SQL ROLLBACK WORK RELEASE;断开和数据库的连接,并释放相关的数据库资源。

4、PROC中的NULL值的处理如果某一字段取出的值是NULL,会报:sqlcode=-1405, sqlerr=ORA-01405: 读取的列值为NULL并且相应的宿主变量的值不会被改动,为执行该SQL语句之前的值. 常用的处理NULL值的方法有:(1)采用指示器变量,此时不会有-1405错误,当必须是所以为NULL的字段都有相应的指示器变量,如果某一字段没有指示器变量,但取出的值为NULL值,则仍然会有-1405错误.当取出的值是NULL时,相应的指示器变量变量为-1,可根据指示器变量的值做响应的处理。

(2)如果字段较多,可取字段到一个结构体中及和该结构体对应的指示器结构体中.如上面的例子中可定义结构体:struct str_emp{long al_empno;char ac_ename;char ac_hiredate;double af_sal;};struct str_emp_ind{long al_empno;char ac_ename;char ac_hiredate;double af_sal;};struct str_emp str_emp;strcut str_emp_ind str_emp_ind;在取之前可用memset(&str_emp,0,sizeof(str_emp)).清空该结构体,这样如果是字符型的NULL,会为"",整型的NULL会为0,网管论坛浮点型的会为0.00。

此时不会有-1405错误。

(3)也可采用NVL()函数:举例如下:EXEC SQL DECLARE authors CURSOR FORSELECT EMPNO, NVL(ENAME,chr(0)),nvl(to_char(HIREDATE,’yyyy/mm/dd hh24:mi:ss’),chr(0)),NVL(SAL,0) FROM EMP;这样也不会有-1405错误不,当取出的值是NULL时,自动用NVL()中指定的值代替.CHR(0)也可直接用’’代替,如下:SELECT EMPNO, NVL(ENAME,’’),nvl(to_char(HIREDATE,’yyyy/mm/dd hh24:mi:ss’),’’),NVL(SAL,0) FROM EMP;5、PROC中的错误的处理所有的SQL语句都有可能出错.所以都要加以判断,但每个SQL语句后都加错误判断,太麻烦,可用一个函数如sql_error()来进行错误处理,方法:(1)定义ql_error()函数。

(2)在开头加上EXEC SQL WHENEVER SQLERROR DO sql_error();这样当发生sqlca.sqlcode <0 的错误时,程式自动转到sql_error()中执行. 注意:对sqlca.sqlcode >0的错误如sqlca.sqlcode =1403 是不会转到sql_error()中执行的.另外:在UNIX下,能用OERR 来查找错误的描述。

相关文档
最新文档