论坛徽章: 0
10 可用积分
已经实现,用system函数。但是strings 我的源文件,就能看见完整的sed命令。
已经搜索过google、baidu、chinaunix,用settimeofday函数改过时区,但是不能生效。也按照论坛某位大侠的指点(别人的问题帖子)去拜读了date的源代码,实在是资质愚努,摆之不平。
无奈采用替代方法,先将localtime文件link到/usr/share/zoneinfo/Asia/Shanghai,然后修改/etc/sysconfig/clock文件,将时区变为亚洲/上海。
问题是,
1、clock配置文件中,我如何只修改TIMEZONE而不改变DEFAULT_TIMEZONE的值呢?函数希望能够通用于修改其他配置文件,所以函数的修改不应该影响函数对其他配置文件的修改。
2、C语言中有没有一个类似sh中^字符的特殊字符。
本人C语言师傅只是google,出于需要使用C(也是练习目的),所以能解决问题就行了,无意对C进行通盘详细研究,遇到啥学啥。各位尽可能详细多说一些。
clock配置文件:
# cat /etc/sysconfig/clock
## Path: System/Environment/Clock
## Description: Information about your timezone and time
## Type: string
## ServiceRestart: boot.clock
#
# Set to "-u" if your system clock is set to UTC, and to "--localtime"
# if your clock runs that way.
#
HWCLOCK="-u"
## Type: string(Europe/Berlin,Europe/London,Europe/Paris)
## ServiceRestart: boot.clock
#
# Timezone (e.g. CET)
# (this will set /usr/lib/zoneinfo/localtime)
#
TIMEZONE="Asia/Shanghai"
DEFAULT_TIMEZONE="US/Pacific"
源代码如下:
tzset();
printf("%s \n",*tzname);
if (strcmp(*tzname,"CST"))
{
filename="/root/clock";
key="\rTIMEZONE";
value="\"Asia/Shanghai\"";
changevalue(filename,key,value);
unlink("/etc/localtime");
link("/usr/share/zoneinfo/Asia/Shanghai","/etc/localtime");
}
函数如下:
void changevalue(char *filename,char *key,char *value)
{
FILE *fin,*fout;
char temp[1024],*ptr,**file,cmd_str[128];
int i=0,j,n=0;
/* 修改配置文件 */
fin=fopen(filename,"r");
while(fgets(temp,1024,fin))
{
i++;
}
rewind(fin);
if(!(file=(char**)malloc(sizeof(char*)*i)))
{
exit(EXIT_FAIL);
}
for(j=0;j<i;j++)
{
if(!(file[j]=(char*)malloc(sizeof(char)*1024)))
{
exit(EXIT_FAIL);
}
}
j=0;
while(j<i)
{
fgets(temp,1024,fin);
if(ptr=strstr(temp,key))
{
*(ptr+strlen(key)+1)=0;
strcat(temp,value);
strcat(temp,"\n");
n=n+1;
}
strcpy(file[j++],temp);
}
fclose(fin);
/* 输出配置文件 */
if (n==1)
{
fout=fopen(filename,"w");
j=0;
while(j<i)
{
fputs(file[j++],fout);
}
fclose(fout);
j=0;
while(j<i)
{
free(file[j++]);
}
}
else
{
printf("ERROR: The value %s in %s is not unique. \n",key,filename);
exit(EXIT_FAIL);
}
}
我来回答