Linux, C-programmering. Hur testa att en fil är färdigskriven?
Har ett litet problem. Ett program ligger och snurrar i en raspberry pi och ibland skriver en liten fil till en RAM-disk. RAM-disken är en plats för utbyte mellan flera program. Kan tyckas lite "knöligt" men processerna är långsamma och filhantering är ganska rakt-på och väl känd.
Nu till problemet. Konsumerande program ligger och väntar på att en fil med ett visst namn ska skrivas/skapas. Jag använder då access() i en loop. Sen måste jag ta till delay_ms() efter att access() hittat filen för att vänta lite innan jag läser. Men tycker detta "vänta xx ms" känns okontrollerat. Finns det en metod att kolla att filen är färdigskriven och stängd av skrivande program?
Tacksam för input.
PS/
Kollade på några exempel på datautbyte via minnet men bävade för exemplen och hade dessutom inte tid att prova och testa. Jag fick lov att gå på en snabbare, känd lösning.
Du...den där var användbar. Ser ut att kunna fungera i en sån där indexeringstjänst som plockar ut nyckelord i en skapad/ändrad fil.
Ska skriva ett testprogram. Tack!
Har testat inotify och det gör det den ska. Implementeringen är väl lite bökig men så kom jag på att jag kan göra en fseek. Rapporterar filesize() tillbaka -1 alt 2 så innebär det att filen ej finns alt har skapats men inte innehåller nåt. Ger filsize() tillbaka nåt >4 då vet jag att den innehåller information som jag kan läsa. (En siffra på rad ett och ett kort ord på rad två). Har testat och det funkar där jag ska använda det. Det gör säkert inotify också men pga tidsbrist så får jag köra filesize().
An annan metod är att du skriver till en fil med ett annat namn . När filen är färdigskriven så gör skrivande program "rename" till filnamnet som läsande program vill läsa. Då finns ingen risk att filen inte är klar.
An annan metod är att du skriver till en fil med ett annat namn . När filen är färdigskriven så gör skrivande program "rename" till filnamnet som läsande program vill läsa. Då finns ingen risk att filen inte är klar.