LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1241|回复: 10

怎样利用c读取conf配制文件中的配制值?

[复制链接]
发表于 2004-1-20 23:32:31 | 显示全部楼层 |阅读模式
比如vsftpd怎么读取vsftpd.conf中的值然后用来规范其行为?
发表于 2004-1-20 23:42:23 | 显示全部楼层

就是直接的扫描conf文件。

就是这样。
 楼主| 发表于 2004-1-21 00:04:17 | 显示全部楼层
什么函数?什么操作?
要不然一个一个字节的核对?
太离谱了吧?
发表于 2004-1-21 00:07:13 | 显示全部楼层

呵呵,我知道的办法之一就是这样。好网上有项目做类似的工作。

我维护FireBirdBBS的代码,里边确实是如我说的那样做。
发表于 2004-1-21 22:14:59 | 显示全部楼层
[php]
/******************************************************/

int read_conf(char *filename,char *akey,char *cont,int num)
{
  /*  filename: 配置文件名
      key: 关键字.
      cont: 返回的内容.
      num: 返回值的长度限制
      返回值: 失败=0  成功=1
  */

  FILE *fn;
  char str[255];
  char keystr[255];
  char contstr[255];
  int i,re=0;
  char *p;

  if((fn=fopen(filename,"rt"))==NULL)
    { perror("Can't read configure file ...\r\n");
      printf("cant't read %s\n",filename);
      exit(1);
    }

  while(!feof(fn))
    { fgets(str,250,fn);
      p=strtok(str,"=");
      if(p)
        { strcpy(keystr,p);
          p=strtok(NULL,"=");

          if(p)
            { strcpy(contstr,p);
              uppercase(keystr); trim(keystr);
              if(strcasecmp(akey,keystr)==0)
                { re=1;
                    break;
                }
            }
        }
      strcpy(str,"");
    }
  fclose(fn);
  contstr[num]=0;
  for(i=strlen(contstr)-1;i>=0;i--)
    { if((contstr==0x0d)||(contstr==0x0a)) contstr=0;
      else break;
    }

  trim(contstr);
  if(strlen(contstr)==0) re=0;

  if(re==1) strcpy(cont,contstr);
  return(re);
}
[/php]

里面有个 trim(char *str)  的去空格函数,不贴了。
发表于 2004-1-21 22:17:48 | 显示全部楼层
eg:
xxx.conf 文件中的 
abcd=12345

char cont[20];
read_conf("/xxx/xxx/xxx.conf","abcd",cont,10);
发表于 2004-1-21 22:27:12 | 显示全部楼层
uppercase() 可以去掉
 楼主| 发表于 2004-1-23 13:21:42 | 显示全部楼层
谢了!有感觉了
发表于 2004-1-31 01:33:27 | 显示全部楼层
conf文件?conf难道是一种格式么
发表于 2004-1-31 20:46:42 | 显示全部楼层
贴出来的程序只是扫描conf文件以获取指定关键字的值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表