想写一个检查 /etc/resolv.conf 文件内容的监控,15 秒检查一次文件内容是否包含 nameserver 8.8.8.8 如果不包含,自动写入 萌新一个,别喷我
1
MeteorCat 2018-04-01 23:03:51 +08:00 via Android
cat /etc/resolv.conf| nameserver 8.8.8.8
|
2
MeteorCat 2018-04-01 23:04:52 +08:00 via Android
上面错了,应该是 cat /etc/resolv.conf | grep nameserver 8.8.8.8
|
3
MeteorCat 2018-04-01 23:06:34 +08:00 via Android 1
或者这样 新建 /data/history/文件夹,之后 cp /etc/reolv.conf 到目录里面之后调用系统 diff 命令
|
4
chattrz OP 用 C 语言能完成吗
|
6
aheadlead 2018-04-01 23:57:11 +08:00 1
用 shell 够了
line='nameserver 8.8.8.8'; path='/etc/resolv.conf'; grep -q "${line}" "${path}" || echo "${line}" >> ${path}; 然后你搜一下 cron 配置每 15 秒执行一下这句话 |
10
MeteorCat 2018-04-02 00:57:27 +08:00 via Android
可以,你保存个原始 resolv.conf 文件,用 C 的文件读取 /etc/resolv.conf 直接对比每个字符串,不符合就将原始配置写入
|
11
WordTian 2018-04-02 01:52:44 +08:00 via Android
用 C 的话应该可以循环按行读文本,搜索 8.8.8.8。
要是不存在,就在最后追加上 nameserver 8.8.8.8 |
12
katsusan 2018-04-02 08:04:30 +08:00 via iPhone
按行读取,调用 strstr 函数找子串,
if (strstr(line,NAMESERVER) = NULL) //null 代表没找到 |
13
kokutou 2018-04-02 08:05:39 +08:00 via Android
用 c 要考虑的边界太多了。。。
|
14
johnniang 2018-04-02 08:09:00 +08:00 via Android
用 shell 的某些命令也只是别人用 C 实现好了的,并不觉得有什么高大上。
|
15
iwtbauh 2018-04-02 08:17:53 +08:00 via Android
@johnniang
1. 避免重复发明轮子。 2. 利用基本(简单)工具,让他们一起工作,从而完成复杂的任务,避免开发复杂的专门程序,这正是 Unix 哲学。 3. 一行 Shell 脚本胜过万行 C 代码。 |
16
iwtbauh 2018-04-02 08:20:39 +08:00 via Android 2
每 15 秒一次不好,太浪费系统资源
fcntl F_NOTIFY (旧内核用这个)和 inotify (新内核用这个)了解一下 |
19
ironx 2018-04-02 09:17:25 +08:00 via Android
可以用 c 做个接口。调用 shell 脚本。或者直接检查内核的数据结构。
|
21
qakito 2018-04-02 13:53:56 +08:00
如果只是以学习语言为目标的话,需要了解:
1. 文件操作 2. 内容匹配 3. 定时器 在此基础上,可以了解 1. awk/sed/grep 等字符匹配工具 2. crond 等定时器 3. inotify api |
22
x86vk 2018-04-02 15:43:16 +08:00 via Android
用 c 可以啊,写几个 exec 嘛(
|