Bläddra i källkod

Clean up sensor file creation

Sven Velt 11 år sedan
förälder
incheckning
e7a031af4d
1 ändrade filer med 16 tillägg och 8 borttagningar
  1. 16 8
      arexxd.c

+ 16 - 8
arexxd.c

@@ -174,20 +174,28 @@ static void rrd_point(time_t t, const char *name, double val, char *unit)
 
 static void store_latest(time_t t, int id, const char *name, int raw, double val, double val2, char *unit, int q)
 {
+	char fileTemp[] = "/tmp/tl-500.XXXXXX";
 	char fileName[64];
 	char buffer[250];
+	int f;
 
-	snprintf(fileName, sizeof(fileName), "/tmp/sensor_%d", id);
-	FILE *f = fopen("/tmp/tl-500.tmp", "w");
-	if(f == NULL)
+	f = mkstemp(fileTemp);
+	if (f < 1)
+	{
+		log_error("Could not open temporary file for sensor data");
 		return;
+	}
 
-	// snprintf(buffer, sizeof(buffer), "%s %d %d %2.1f C\n", system_time(), sensor, value, temperature);
-	snprintf(buffer, sizeof(buffer), "%u Sensor:%d Raw:%d Value:%.2f Unit:%s Name:\"%s\" Value2:%.2f Q:%d", (unsigned)t, id, raw, val, unit, name, val2, q);
+	fchmod(f, 0644);
 
-	fprintf(f, buffer);
-	fclose(f);
-	rename("/tmp/tl-500.tmp", fileName);
+	/* Prepare content of file */
+	snprintf(buffer, sizeof(buffer), "%u Sensor:%d Raw:%d Value:%.2f Unit:%s Name:\"%s\" Value2:%.2f Q:%d\n", (unsigned)t, id, raw, val, unit, name, val2, q);
+	write(f, buffer, strlen(buffer));
+	close(f);
+
+	/* Rename temp file */
+	snprintf(fileName, sizeof(fileName), "/tmp/sensor_%d", id);
+	rename(fileTemp, fileName);
 }
 
 /*** Transforms ***/