今天在使用fgets读文件配置的时候,使用fgetes读取
br=br-lan
使用fgets读取一行并进行分割得到ifname=br-lan
, 但是由于fgets
在读取行的时候也会把换行符\n
读取,导致读取到的ifname=br-lan\n\0
.这个时候,如果使用ifname
拼接文件路径,如/sys/class/net/%s/beidge
的时候,就会出现错误,使用stat
判断文件是否存在就会出错。原因就是带有换行符导致文件路径出现问题。
正确的解决方法是把换行符换成\0
之后再进行字符串的处理。
//br=br-lan
char *key = fgets(line, MAX_LINE, fp);
char *p = strchr(line, '=');
char *value = p + 1;
*p = '\0';
vlaue[strlen(vlaue) - 1] = '\0'; // 这样处理之后就是不带换行符的
使用char *fgets(char *s, int size, FILE *stream);
注意点:
- 最多读取
size-1
个字符,会在最后添加\0
。 - 遇到
EOF
或者换行符停止读取。 - 如果读取遇到换行符,则换行符也会被读取到
s
中,并且也会在最后添加\0
。 - 成功返回
s
, 失败或者遇到文件结尾返回NULL
,并设置errno
。