您的位置:首页 > 数据库 > Oracle

学习ORACLE中关于配置文件的读取和修改心得以及问题

2012-02-19 16:14 561 查看
最近在学习ORACLE数据库,其中学习到配置文件的读取和修改时,

碰到了一点小问题,自己在解决的过程中也有了一点小心得,所以想记下来和大家分享一下,

本人属于菜鸟水平,所以这些心得对于大虾们可能会觉得好笑


(1)、 首先是配置文件的编写,一开始我是这么写的,例子如下:

#数据库的实例名

dbstring=(oracle)

#数据库system的密码

systempass=(manager)

#连接数据库库的用户的密码

dbpass=(pos)

#是否是第一次运行

isfirst=(yes)

#end

大家可能注意到了,我的 “dbstring=(oracle)”等数据都没有顶格写,

而是在前面用TAB键做了缩进,这正是造成我后面对配置文件进行回改时出现错误的原因。

我写的读取配置文件程序如下:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

typedef struct _data

{

char key[20];

char val[20];

}DATA;

DATA nowdata[5];

int read_conf(char *filename)

{

FILE *fp;

char buf[1024]="";

char *p;

char nkey[20];

char nval[20];

int i=0;

fp=fopen(filename,"r+");

if (fp == NULL)

{

printf("open file failure!\n");

return 1;

}

while (1)

{

memset(buf,0,sizeof(buf));

p=fgets(buf,sizeof(buf),fp);

if (p == NULL)

{

break;

}

if (buf[0] == '#')

{

continue;

}

p=strchr(buf,'=');

if (p != NULL)

{

strcpy(nval,p+2);

*p='\0';

strcpy(nkey,buf);

p=strchr(nval,')');

if (p != NULL)

{

*p='\0';

}

strcpy(nowdata[i].key,nkey);

strcpy(nowdata[i].val,nval);

if (strcmp(nkey,"isfirst") == 0)

{

fseek(fp,-6,SEEK_CUR);

fputs("no)\r\n",fp);

}

i++;

}

}

fclose(fp);

return i;

}

int main(int argc,char *argv[])

{

int i,j;

i=read_conf("poss.conf");

for (j=0;j<i ;j++ )

{

printf("%s(%s)\n",nowdata[j].key,nowdata[j].val);

}

return 0;

};

问题就出现在我在程序中做记号那行,因为我的配置文件的数据是没有顶格写的,

而是在前面加了个TAB键,一开始自己认为美观,

,但是我在比较的时候是

和“isfirst”进行比较的,所以这行程序条件不满足,下面的回改程序就没有运行,

没有达到对配置文件第一次进行读取后,程序自动将“yes”改为“no”的目的。

所以应该将配置文件中的TAB键删除,或者在比较程序中和“\tisfirst”进行比较。

(2)、本人在读取配置文件的过程中碰到一个很奇怪的问题,我一开始写了

个读取配置文件的程序,然后以另外一种方法又写了个类似的程序,分别用

两个程序对同一个配置文件进行读写,发现第二个程序对配置文件能够正确

读取,但是配置文件不会发生修改,“yes”参数不会自动修改为“no”,但是第

二次读取确实已经变为"no"了,只是配置文件中无法体现,我就在同目录下

原原本本的复制了一个一模一样的配置文件,只是文件名改过一下,用第二

个程序可以实现正确的读取和回改。

难道一个配置文件只能被一个程序进行回改么,希望哪位知道的朋友能够

为我解惑,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐