博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读取环境变量并利进行文件的解析
阅读量:6830 次
发布时间:2019-06-26

本文共 2243 字,大约阅读时间需要 7 分钟。

同样以触摸屏的适配器tslib中的函数进行描述,如何从当前的环境变量中读取一个环境变量,并利进行文件的解析,

下面先对几个程序看几个将要用到的函数:

 FILE * fopen(const char * path,const char * mode);

  函数功能: 打开一个文件
  函数原型:FILE * fopen(const char * path,const char * mode);
  相关函数:open,fclose,fopen_s[1] ,_wfopen
  所需库: <stdio.h>
  返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。
  一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。
 (参考百度百科)

  char *strdup(char *s);

  功能:复制字符串s
  说明:返回指向被复制的字符串的指针,所需空间由malloc()分配且可以由free()释放。

 char *strsep(char **stringp, const char *delim);

  功能:分解字符串为一组字符串。

 strcasecmp(忽略大小写比较字符串)

  相关函数 bcmp,memcmp,strcmp,strcoll,strncmp
  表头文件 #include<string.h>
  定义函数 int strcasecmp (const char *s1, const char *s2);
  函数说明 strcasecmp()用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异。
 返回值 若参数s1和s2字符串相同则返回0。s1长度大于s2长度则返回大于0 的值,s1 长度若小于s2 长度则返回小于0的值。

 
int
ts_config(
struct
tsdev
*
ts)
{
char
buf[BUF_SIZE],
*
p;
FILE
*
f;
int
line
=
0
;
int
ret
=
0
;
char
*
conffile;
if
( (conffile
=
getenv(
"
TSLIB_CONFFILE
"
))
==
NULL) {
conffile
=
strdup (TS_CONF);
}
f
=
fopen(conffile,
"
r
"
);
if
(
!
f) {
perror(
"
Couldnt open tslib config file
"
);
return
-
1
;
}
buf[BUF_SIZE
-
2
]
=
'
\0
'
;
while
((p
=
fgets(buf, BUF_SIZE, f))
!=
NULL) {
char
*
e;
char
*
tok;
char
*
module_name;
line
++
;
/*
Chomp
*/
e
=
strchr(p,
'
\n
'
);
if
(e) {
*
e
=
'
\0
'
;
}
/*
Did we read a whole line?
*/
if
(buf[BUF_SIZE
-
2
]
!=
'
\0
'
) {
ts_error(
"
%s: line %d too long\n
"
, conffile, line);
break
;
}
tok
=
strsep(
&
p,
"
\t
"
);
/*
Ignore comments or blank lines.
* Note: strsep modifies p (see man strsep)
*/
if
(p
==
NULL
||
*
tok
==
'
#
'
)
continue
;
/*
Search for the option.
*/
if
(strcasecmp(tok,
"
module
"
)
==
0
) {
module_name
=
strsep(
&
p,
"
\t
"
);
ret
=
ts_load_module(ts, module_name, p);
}
else
if
(strcasecmp(tok,
"
module_raw
"
)
==
0
) {
module_name
=
strsep(
&
p,
"
\t
"
);
ret
=
ts_load_module_raw(ts, module_name, p);
}
else
{
ts_error(
"
%s: Unrecognised option %s:%d:%s\n
"
, conffile, line, tok);
break
;
}
if
(ret
!=
0
) {
ts_error(
"
Couldnt load module %s\n
"
, module_name);
break
;
}
}
if
(ts
->
list_raw
==
NULL) {
ts_error(
"
No raw modules loaded.\n
"
);
ret
=
-
1
;
}
fclose(f);
return
ret;
}

转载于:https://www.cnblogs.com/hoys/archive/2011/04/25/2026817.html

你可能感兴趣的文章
2017ACM/ICPC广西邀请赛 Color it
查看>>
Photoshop蒙版介绍之图层蒙版
查看>>
java通过传送地址获取坐标
查看>>
10个Python练手小程序,学习python的很好的资料
查看>>
Linux终端快捷键
查看>>
乐观锁与悲观锁
查看>>
docker windows container的一些注意点
查看>>
拥抱博客园
查看>>
yum使用详细
查看>>
2.字符串
查看>>
Linux权限管理命令
查看>>
[转]关于strtok和strtok_r函数的深度研究
查看>>
ios-自定义点击状态栏滚回顶部
查看>>
Django现有模型增加字段
查看>>
解决IE6浏览器下position:fixed固定定位问题
查看>>
Rest分页接口开发
查看>>
Mybatis中oracle如何批量insert语句
查看>>
org.aspectj.lang.JoinPoint-中文简要API(转)
查看>>
面向对象知识
查看>>
数据库中算式的简单例子
查看>>