[C] Refresh d'un fichier ouvert

Refresh d'un fichier ouvert [C] - C - Programmation

Marsh Posté le 05-05-2021 à 15:48:31    

Hello,
 
Je tripouille une petite appli en C pour adapter le fonctionnement selon mon souhait.  
 
Cette appli ouvre un fichier au lancement. Je peux être amener à modifier ce fichier en dehors de l'appli.  
 
Un rewind et relecture du fichier me renvoi les anciennes données. (cache ?)
 
Je ne peux pas faire de fopen/fclose/freopen parce que le programme entre en mode sandbox peu après le démarrage.  
 
Qu'est ce qu'il existe comme autre(s) possibilité(s) pour qu'il relise les nouvelles valeurs ? J'ai lu aussi quelque chose en rapport avec fflush mais sans succès.  
 
Thanks,
 
K.


---------------
http://lacabanedeladmin.trickip.net/
Reply

Marsh Posté le 05-05-2021 à 15:48:31   

Reply

Marsh Posté le 06-05-2021 à 17:56:39    

fseek(fichier, SEEK_SET, 0) (ou l'inverse, je me souviens jamais de l'ordre des arguments...) ?

 

edit: Ah euh non, tu en parlais. :o Aucune idée du coup, y a pas grand chose d'autre dans la lib' standard...

 

Ca veut dire quoi exactement "mode sandbox"?


Message édité par rat de combat le 06-05-2021 à 18:33:57
Reply

Marsh Posté le 06-05-2021 à 18:42:45    

En fait derrière le nom sandbox (nom donné à la fonction dans le code), c'est une gestion très fine des capabilities (capsicum/pledge pour les BSDs, j'ai plus le nom pour les linux). Par défaut, t'as pas le droit de faire grand chose une fois que t'as fait appel à ces fonctions et que t'as pas prévu à l'avance.  
 
Du coup en enlevant l'appel à ces fonctions, je peux faire ce que je veux avec un freopen mais quand je les remet je me tape un joli  

ERR#94 'Not permitted in capability mode'


 
Je vais voir avec fseek si j'arrive à quelquechose, sinon je suis bon pour me taper la gstion des capabilities.
 
Edit: le rewind ca serait pas un fseek à 0 déjà ?!

Message cité 1 fois
Message édité par kisscoolz le 06-05-2021 à 18:45:49

---------------
http://lacabanedeladmin.trickip.net/
Reply

Marsh Posté le 06-05-2021 à 18:49:44    

kisscoolz a écrit :

Edit: le rewind ca serait pas un fseek à 0 déjà ?!

Oui, voir mon édit. :o  
 
(De mémoire rewind = fseek etc  + clear error)
 
Question bête, tu peux pas virer cette histoire de gestion de droits? Ou c'est pour un usage pro dans un environnement restreint?

Reply

Marsh Posté le 06-05-2021 à 19:09:13    

Vu ton edit après avoir répondu et j'ai pas tilté tout de suite.
 
Après test je confirme le fseek fait pareil que le rewind.
 
Par contre je me demande comment c'est possible qu'il y'ai deux copies/versions. Ce qu'il y'a dans le programme, lu à l'ouverture, et ce qu'il y'a coté système, qui a divergé après ouverture du programme.  
 
Je me doute que c'est pas hyper propre comme façon de faire mais quand même.  
 
C'est un soft public, si je veux pouvoir remonter le changement, casser des pans de sécurité, c'est pas la meilleur des choses à faire (déjà que je code comme un goret) :o
 
Eventuellement si j'arrive pas à faire les modifs de façon propre, je garderais pour un usage perso les changement dégeux et le cassage de la sécu.


---------------
http://lacabanedeladmin.trickip.net/
Reply

Marsh Posté le 09-05-2021 à 09:33:51    

Bon, j'ai je pense réussi à faire quelque chose d'a peu près potable.  
 
L'idée c'est de passer par un opendir() avant de rentrer en mode sécurisé et de se servir de openat() pour réouvrir le fichier dans le dossier précédemment sélectionné (chose permise en mode restreint).


---------------
http://lacabanedeladmin.trickip.net/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed