可能是还没写入文件就已经断电了,导致的数据丢失
linux内核写入文件的特性:先将内容写入缓存,在io空闲或者一段时间等情况下,再将内容写入磁盘,
当内容在缓存中时,可以通过 cat 命令查看内容,因此通过 cat 命令能查看到 IP 不能说明已经将内容写入
在设置完静态IP之后,调用相关方法,马上将内容写入磁盘。
代码路径:frameworks/base / services/core/java/com/android/server/net/IpConfigStore.java
public void writeIpConfigurations(String filePath,
ArrayMap<String, IpConfiguration> networks) {
mWriter.write(filePath, out -> {
out.writeInt(IPCONFIG_FILE_VERSION);
for(int i = 0; i < networks.size(); i++) {
writeConfig(out, networks.keyAt(i), networks.valueAt(i));
}
+ try {
+ sync(filePath);
+ } catch (IOException e) {
+ loge("Ipconfig sync error:" + e.toString());
+ }
});
}
+ public void sync(String filepath) throws IOException {
+ File f = new File(filepath);
+ RandomAccessFile raf = null;
+
+ try {
+ raf = new RandomAccessFile(f, "r");
+ FileDescriptor fd = raf.getFD();
+ fd.sync();
+
+ } finally {
+ if (raf != null) {
+ raf.close();
+ }
+ }
+ }