Ouvrir et fermer un fichier dans une boucle
PierrotLeFou - 31 juil. 2024 à 05:05
- Ouvrir et fermer un fichier dans une boucle
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Comment ouvrir un fichier docx ? - Guide
- Ouvrir un fichier .dat - Guide
- Fichier rar - Guide
7 réponses
Est-ce que ton programme en C est continuellement actif ou s'il est réappelé?
S'il reste actif, tu pourrais appeler la fonction stat() ou _stat (sur Windows) qui te donne la date-heure de la dernière modification et la longueur du fichier.
Tu peux rappeler stat() en boucle avec une pause à chaque tour de boucle.
Salut.
Je ne suis pas non plus calé en c ^^
- Si le script python est sous ton contrôle, alors peut-être modifier son comportement pour qu'il lance ton programme c ?
- Ou alors une tâche planifiée (cron sur linux) qui détecterait si ton fichier a été ouvert (ou fermé) et lancerait ton programme c ?
- Ou alors un thread qui vérifierait périodiquement la date de modif ce ton fichier ?
29 juil. 2024 à 10:58
Salut, merci pour ta réponse malheureusement tes solutions me semblent encore moins optimisées dans mon cas du fait que mon scripte python envoie réellement des informations en continu. Mon programme C doit donc s'actualiser aussi vite
29 juil. 2024 à 14:25
bonjour,
Connais-tu les "pipe"? Sous quel OS travailles-tu?
29 juil. 2024 à 14:32
bonjour, j'en ai entendu parler en faisant mes recherches mais il me semble avoir compris que ce t'était que sur Linux. Malheureusement je suis sous Windows. J'aimerais simplement savoir si ouvrir et fermer des fichiers de la sorte est problématique
29 juil. 2024 à 14:40
Tu peux utiliser des pipe également sous Windows.
Tu ne nous en dit pas assez pour déterminer si ce que tu fais est problématique.
29 juil. 2024 à 15:09
while(quit == 0){ input = fopen("./Debug/output.txt", "r"); if(SDL_PollEvent(&event)){ switch(event.type){ case SDL_QUIT: quit = 1; break; case SDL_KEYUP: switch(event.key.keysym.sym){ case SDLK_ESCAPE: quit = 1; break; default: break; } break; default: break; } } fscanf(input, "%d", &button); int red = button; int blue = 255 - button; SDL_SetRenderDrawColor(pRenderer, red, 0, blue, 0); SDL_RenderFillRect(pRenderer, &rect); SDL_RenderPresent(pRenderer); fclose(input); }
dans ce code je mets à jour ma variable input pour avoir constamment la dernière valeur renvoyée par mon scripte Python. Malheureusement, si je me contente d'ouvrir et de fermer mon fichier en début puis en fin de programme celui ci capture une valeur à un instant T et ne se met pas à jour c'est pour ça que j'ai trouvé la solution d'intégrer ces deux actions dans la boucle dans laquelle j'utilise ma variable input
29 juil. 2024 à 16:05
Au minimum, j'ajouterais une pause dans la boucle.
Et, si la valeur de button n'a pas changé, je ne ferais pas les appels aux fonctions SDL.
Si cela se passe sur un ordi qui ne sert à rien d'autre, cela ne me semble pas trop gênant d'ainsi gaspiller son énergie.
29 juil. 2024 à 16:20
c'est sur une ordi normal, je fais d'autres choses avec. Tu penses que c'est gourmand en ressources ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question29 juil. 2024 à 14:44
Salut,
https://dotclear.placeoweb.com/post/tail-windows ?
avec un -f pour en suivre l'évolution.
29 juil. 2024 à 15:38
merci, mais je ne comprends pas trop comment ça fonctionne
29 juil. 2024 à 15:53
sous linux, la commande :
tail -f /nom_de_fichier
lit les n dernières lignes du fichier et les affiche ainsi que toute nouvelle ligne du fichier au fur et à mesure de son remplissage.
Cet affichage dure jusqu'à ce que la commande soit arrêtée.
Par contre, il est possible que le processus de lancement de la commande via ton programme ne provoque pas un fork et que tu ne sois donc obligé d'attendre la fin de la commande (qui ne viendra jamais) pour en obtenir le résultat.
A moins que tu ne puisses forker un process en mode asynchrone et venir voir son état (et sa sortie) toutes les n secondes.
29 juil. 2024 à 16:20
Ha mince :( Je suis sous Windows malheureusement
30 juil. 2024 à 08:48
Oui mais le lien que j'ai donné te permet d'installer sous windows un programme qui se comporte comme 'tail'.
Modifié le 30 juil. 2024 à 18:43
Bonjour,
- Sous Linux, je te dirais de regarder du coté d'inotify qui est précisément conçu pour surveiller lorsqu'un fichier évolue.
- Sous Windows, il existe des équivalents (voir cette discussion).
Bonne chance