URL: https://linuxfr.org/forums/programmation-c--2/posts/ecritures-disques-non-bloquants Title: Ecritures disques non bloquants Authors: ilip Date: 2011年10月28日T12:15:46+02:00 Tags: Score: 3 Bonjour, Je développe sur une carte embarquée ARM BeagleBoard xM, sur laquelle j'ai installée Debian. Le système est installé et boot sur une carte MicroSD. J'ai un programme C qui a des contraintes de temps de réponse de l'ordre des 50ms à respecter. Lorsque je lance le programme normalement (./prog), mon temps de réponse est toujours respecté. Cependant lorsque je redirige la sortie stdout du programme vers un fichier pour faire des logs (./prog> log), le programme se bloque de temps en temps (environ une seconde) lorsque le système effectue les écritures disques (sur la carte SD). Car le système effectue les écritures disques du buffer stdout. Ce sont donc les printf() qui deviennent bloquants lors de ces écritures disque. Je cherche une solution qui me permettrai de continuer à enregistrer les logs sur le disque, tout en évitant les bloquages causés par les écritures disques. J'ai pensé a quelques solutions : - utiliser le service rsyslog : ça ne convient pas car il y'a des printf toutes les 50ms, ca fait beaucoup pour rsyslog - monter un système de fichier ramfs ou tmpfs : ça ne va pas car j'ai peu de ram... - passer par une FIFO dans le programme : créer un PIPE, envoyer les printf dans ce pipe, et envoyer les données du pipe vers stdout à partir d'un thread, mais c'est un peu lourd - monter le système de fichier avec l'option "sync" cela rend l'ensemble du système beaucoup plus lent Peut-être qu'il existe des solutions plus efficaces, mais je n'en voit pas. Merci

AltStyle によって変換されたページ (->オリジナル) /