Просмотр исходного кода

优化writeDeviceIMEI()函数, 增强其并发操作时的安全性

niujiuru 3 недель назад
Родитель
Сommit
23ea3f51bb
1 измененных файлов с 15 добавлено и 4 удалено
  1. 15 4
      main.go

+ 15 - 4
main.go

@@ -144,12 +144,23 @@ func help() {
 }
 
 func writeDeviceIMEI() {
+	const path = "/var/device_imei.txt"
+	tmp := path + ".tmp"
+
 	for {
-		imei := netmgrd.GetIMEI()
-		if imei == netmgrd.ErrUnknownModemTypeMsg || imei == "" {
+		imei := strings.TrimSpace(netmgrd.GetIMEI())
+		if imei == "" || imei == netmgrd.ErrUnknownModemTypeMsg {
+			time.Sleep(time.Second)
 			continue
 		}
-		os.WriteFile("/var/device_imei.txt", []byte(strings.TrimSpace(imei)+"\n"), 0644)
-		break
+
+		if old, err := os.ReadFile(path); err == nil && strings.TrimSpace(string(old)) == imei {
+			return
+		}
+
+		if os.WriteFile(tmp, []byte(imei+"\n"), 0644) == nil {
+			_ = os.Rename(tmp, path)
+		}
+		return
 	}
 }