[求助] Linux C 语言检查文件内容是否包含关键字

2018-04-01 23:00:01 +08:00
 chattrz

想写一个检查 /etc/resolv.conf 文件内容的监控,15 秒检查一次文件内容是否包含 nameserver 8.8.8.8 如果不包含,自动写入 萌新一个,别喷我

2046 次点击
所在节点    问与答
22 条回复
MeteorCat
2018-04-01 23:03:51 +08:00
cat /etc/resolv.conf| nameserver 8.8.8.8
MeteorCat
2018-04-01 23:04:52 +08:00
上面错了,应该是 cat /etc/resolv.conf | grep nameserver 8.8.8.8
MeteorCat
2018-04-01 23:06:34 +08:00
或者这样 新建 /data/history/文件夹,之后 cp /etc/reolv.conf 到目录里面之后调用系统 diff 命令
chattrz
2018-04-01 23:53:05 +08:00
用 C 语言能完成吗
chattrz
2018-04-01 23:53:20 +08:00
@MeteorCat 用 C 语言能完成吗
aheadlead
2018-04-01 23:57:11 +08:00
用 shell 够了
line='nameserver 8.8.8.8'; path='/etc/resolv.conf'; grep -q "${line}" "${path}" || echo "${line}" >> ${path};

然后你搜一下 cron 配置每 15 秒执行一下这句话
chattrz
2018-04-01 23:57:46 +08:00
@aheadlead 大佬能用 C 语言完成吗
aheadlead
2018-04-01 23:58:32 +08:00
@chattrz 你这是何必呢…
chattrz
2018-04-01 23:59:58 +08:00
@aheadlead 先谢为敬:D
MeteorCat
2018-04-02 00:57:27 +08:00
可以,你保存个原始 resolv.conf 文件,用 C 的文件读取 /etc/resolv.conf 直接对比每个字符串,不符合就将原始配置写入
WordTian
2018-04-02 01:52:44 +08:00
用 C 的话应该可以循环按行读文本,搜索 8.8.8.8。
要是不存在,就在最后追加上 nameserver 8.8.8.8
katsusan
2018-04-02 08:04:30 +08:00
按行读取,调用 strstr 函数找子串,
if (strstr(line,NAMESERVER) = NULL) //null
代表没找到
kokutou
2018-04-02 08:05:39 +08:00
用 c 要考虑的边界太多了。。。
johnniang
2018-04-02 08:09:00 +08:00
用 shell 的某些命令也只是别人用 C 实现好了的,并不觉得有什么高大上。
iwtbauh
2018-04-02 08:17:53 +08:00
@johnniang
1. 避免重复发明轮子。
2. 利用基本(简单)工具,让他们一起工作,从而完成复杂的任务,避免开发复杂的专门程序,这正是 Unix 哲学。
3. 一行 Shell 脚本胜过万行 C 代码。
iwtbauh
2018-04-02 08:20:39 +08:00
每 15 秒一次不好,太浪费系统资源
fcntl F_NOTIFY (旧内核用这个)和 inotify (新内核用这个)了解一下
johnniang
2018-04-02 09:05:38 +08:00
@iwtbauh 别人是以学习的目的来完成这个功能,而不是依靠工具一步到位。
pkookp8
2018-04-02 09:10:40 +08:00
@MeteorCat grep 后不要跟两个参数,第二个参数会被识别为文件名。或者加引号
ironx
2018-04-02 09:17:25 +08:00
可以用 c 做个接口。调用 shell 脚本。或者直接检查内核的数据结构。
FifiLyu
2018-04-02 09:30:08 +08:00
@iwtbauh +1
用 inotify 才是正解。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/443424

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX