Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/06/2015, à 09:55

izd

[RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

Bonjour @ toutes & tous,

Le titre résume bien à lui seul le problème.

Il s'agit de fichiers systèmes situés dans :
/proc/sys/fs/inotify/
   |___max_queued_events
   |___max_user_instances
   |___max_user_watches

NB: Peut-être besoin d'installer les paquets inotify et/ou inotify-tools (très petit) pour voir ce répertoire

Depuis Nemo, les propriétés de ces fichiers donnent ZÉRO pour la taille.
Si j'édite un fichier avec gedit, je lis bien son contenu mais quand je modifie la valeur et sauvegarde, j'obtiens une erreur alors que la modification est quand même appliquée. ??!!

C'est la première fois que je vois des fichiers à ZÉRO non vide que l'on peut quand même modifier...

En attendant, que ce soit avec un Stream ou un fichier direct, impossible de lire ces fichiers depuis mon programme (Lazarus/fpc).

Une idée ?

Dernière modification par izd (Le 30/06/2015, à 09:27)


Fiat Lux GNU/Linux !

Config 1: Mint 17.3x64~Cinnamon @ GIGABYTE GA-H77-D3H / i5-3570K - 3.4 GHz - GTX 970 / ram 2x4@1600 / ssd 120Go / 1To+1To+2To
Config 2: Mint 17.3x64~Cinnamon @ ASUS M3N78-EM / AMD Athlon 7750x2 @2.70GHz / ram 6Go / GeForce 210  / ssd 120Go + 750Go + 500Go@RAID 1

Hors ligne

#2 Le 28/06/2015, à 10:50

tiramiseb

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

Salut,

Ce ne sont pas des "vrais" fichiers. Dans /proc (et dans /sys), on retrouve des pseudo-fichiers, qui sont en fait des valeurs gérées par le noyau Linux.

Avec un éditeur, tu as une erreur car l'éditeur fait généralement + que simplement écrire une valeur dans un fichier (par exemple écrire un fichier de sauvegarde, ce qui est impossible dans /proc bien sûr).

Si c'est la première fois que tu rencontres ça mais que tu en as besoin, alors tu as besoin de te perfectionner sur les aspects un peu plus "bas niveau" des systèmes Linux.

Hors ligne

#3 Le 28/06/2015, à 12:12

bruno

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

Un peu de lecture sur le système de fichiers virtuel procfs pour compléter wink

https://fr.wikipedia.org/wiki/Procfs
http://www.tldp.org/LDP/Linux-Filesyste … /proc.html
et bien sur man proc

À noter que de manière analogue sysfs (/sys) permet d’accéder aux informations sur les périphériques

Hors ligne

#4 Le 28/06/2015, à 18:32

izd

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

Ok, tout s'explique maintenant !

Et...Il existe un moyen de lire ces pseudo fichier ?


Fiat Lux GNU/Linux !

Config 1: Mint 17.3x64~Cinnamon @ GIGABYTE GA-H77-D3H / i5-3570K - 3.4 GHz - GTX 970 / ram 2x4@1600 / ssd 120Go / 1To+1To+2To
Config 2: Mint 17.3x64~Cinnamon @ ASUS M3N78-EM / AMD Athlon 7750x2 @2.70GHz / ram 6Go / GeForce 210  / ssd 120Go + 750Go + 500Go@RAID 1

Hors ligne

#5 Le 28/06/2015, à 23:02

tiramiseb

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

cat

Hors ligne

#6 Le 29/06/2015, à 08:57

grim7reaper

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

izd a écrit :

Ok, tout s'explique maintenant !

Et...Il existe un moyen de lire ces pseudo fichier ?

En utilisant les fonctions qui ouvrent/lisent/ferment les fichiers dans ton langage de programmation.
Au niveau interface, ce sont des fichiers comme les autres (open, read et close fonctionnent, certains autorisent même write).

Hors ligne

#7 Le 29/06/2015, à 09:12

izd

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

Merci à tous pour votre aide.

Pour info, j'utilise un TProcess avec :
(prop)Executable="cat"
(prop)Parameters="/proc/sys/fs/inotify/max_user_watches"

...Et lire la sortie standard pour récupérer la valeur !

Question de dernière minute: Dans mes tests précédents, j'ai modifié ces fichiers de configurations mais je viens de m'apercevoir qu'ils reprennent leurs valeurs par défaut après redémarrage du système.

Comment modifier ces fichiers de façon définitive ?


Fiat Lux GNU/Linux !

Config 1: Mint 17.3x64~Cinnamon @ GIGABYTE GA-H77-D3H / i5-3570K - 3.4 GHz - GTX 970 / ram 2x4@1600 / ssd 120Go / 1To+1To+2To
Config 2: Mint 17.3x64~Cinnamon @ ASUS M3N78-EM / AMD Athlon 7750x2 @2.70GHz / ram 6Go / GeForce 210  / ssd 120Go + 750Go + 500Go@RAID 1

Hors ligne

#8 Le 29/06/2015, à 09:14

tiramiseb

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

Pour info, j'utilise un TProcess [...]

Ton langage n'est pas capable d'ouvrir et lire un fichier tout seul !?!?

j'ai modifié ces fichiers de configurations mais je viens de m'apercevoir qu'ils reprennent leurs valeurs par défaut après redémarrage du système.

Comment modifier ces fichiers de façon définitive ?

Tout ce qui est dans /proc/sys peut être paramétré dans /etc/sysctl.conf.

Hors ligne

#9 Le 29/06/2015, à 14:39

izd

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

tiramiseb a écrit :

Ton langage n'est pas capable d'ouvrir et lire un fichier tout seul !?!?

Justement non, pas des fichiers à zéro comme je le disais dans mon post #1 :

izd a écrit :

En attendant, que ce soit avec un Stream ou un fichier direct, impossible de lire ces fichiers depuis mon programme (Lazarus/fpc).

Cette façon de faire en lançant la commande cat me convient parfaitement, ne reste plus qu'à trouver comment rendre permanent les changements sur ces pseudos fichiers.
Le fichier /etc/sysctl.conf ne contient aucune information sur les fichiers qui m'intéressent.
Peut-être suffit-il d'ajouter des lignes VARIABLE = VALEUR ?


Fiat Lux GNU/Linux !

Config 1: Mint 17.3x64~Cinnamon @ GIGABYTE GA-H77-D3H / i5-3570K - 3.4 GHz - GTX 970 / ram 2x4@1600 / ssd 120Go / 1To+1To+2To
Config 2: Mint 17.3x64~Cinnamon @ ASUS M3N78-EM / AMD Athlon 7750x2 @2.70GHz / ram 6Go / GeForce 210  / ssd 120Go + 750Go + 500Go@RAID 1

Hors ligne

#10 Le 29/06/2015, à 14:47

tiramiseb

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

Justement non, pas des fichiers à zéro

Étrange, la plupart des langages s'en foutent de la taille au moment d'ouvrir.

En Python par exemple, c'est une simple lecture de fichier comme ça

>>> file('/proc/sys/net/ipv4/ip_forward', 'r').read()
'1\n'

Peut-être suffit-il d'ajouter des lignes VARIABLE = VALEUR ?

Exact, en remplaçant "/" par "." pour faire joli. Inspire-toi de ce qui y est déjà smile


-----



Je n'ai jamais fait de Free Pascal, mais vu ce que je trouve sur Internet... quelque chose comme ça ne fonctionne pas ?

program ReadFile;
 
{$mode objfpc}
 
uses
 Sysutils;
 
var
 File1: TextFile;
 Str: String;
 
begin
  Writeln('Lecture de fichier:');
  AssignFile(File1, '/proc/sys/net/ipv4/ip_forward');
  Reset(File1);
  Read(File1, Str);
  Writeln(Str);
  CloseFile(File1);
end.

Hors ligne

#11 Le 29/06/2015, à 16:21

izd

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

tiramiseb a écrit :

Je n'ai jamais fait de Free Pascal, mais vu ce que je trouve sur Internet... quelque chose comme ça ne fonctionne pas ?
.../...

Disons qu'il y a une certaine cohérence dans tout ça :
Aucune fonction n'est capable de me renvoyer une taille différente de 0.
Du coup, que j'attaque le fichier en mode texte, binaire ou via un flux...nada...


Fiat Lux GNU/Linux !

Config 1: Mint 17.3x64~Cinnamon @ GIGABYTE GA-H77-D3H / i5-3570K - 3.4 GHz - GTX 970 / ram 2x4@1600 / ssd 120Go / 1To+1To+2To
Config 2: Mint 17.3x64~Cinnamon @ ASUS M3N78-EM / AMD Athlon 7750x2 @2.70GHz / ram 6Go / GeForce 210  / ssd 120Go + 750Go + 500Go@RAID 1

Hors ligne

#12 Le 29/06/2015, à 23:09

grim7reaper

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

tiramiseb a écrit :

Je n'ai jamais fait de Free Pascal, mais vu ce que je trouve sur Internet... quelque chose comme ça ne fonctionne pas ?

program ReadFile;
 
{$mode objfpc}
 
uses
 Sysutils;
 
var
 File1: TextFile;
 Str: String;
 
begin
  Writeln('Lecture de fichier:');
  AssignFile(File1, '/proc/sys/net/ipv4/ip_forward');
  Reset(File1);
  Read(File1, Str);
  Writeln(Str);
  CloseFile(File1);
end.

Je confirme que ce code fonctionne  (je viens d’installer fpc pour tester)

Hors ligne

#13 Le 30/06/2015, à 08:35

tiramiseb

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

Merci grim7reaper ! Je m'apprêtais à tester ça ce matin en installant fpc chez moi...

Donc, izd, le code que j'ai proposé fonctionne et FreePascal est capable de lire ces données de lui-même sans s'appuyer sur une commande externe "cat" qui ne sera peut-être pas toujours là (et qui fait consommer des milliers de cycles processeur en plus pour rien).

Hors ligne

#14 Le 30/06/2015, à 09:27

izd

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

????????????

Dans le doute j'ai re-testé le code de grim7reaper et .....ça fonctionne !

Je peux vous assurez que ce code ne fonctionnait pas le jour ou j'ai écris ce post...??!!
Peut-être est-ce dû au fait que j'ai tenté d'accéder à ces fichiers juste après l'installation des paquets qui les gèrent.
Le mystère restera entier jusqu'à...

Enfin, merci à tous !

@+


Fiat Lux GNU/Linux !

Config 1: Mint 17.3x64~Cinnamon @ GIGABYTE GA-H77-D3H / i5-3570K - 3.4 GHz - GTX 970 / ram 2x4@1600 / ssd 120Go / 1To+1To+2To
Config 2: Mint 17.3x64~Cinnamon @ ASUS M3N78-EM / AMD Athlon 7750x2 @2.70GHz / ram 6Go / GeForce 210  / ssd 120Go + 750Go + 500Go@RAID 1

Hors ligne

#15 Le 30/06/2015, à 09:29

tiramiseb

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

C'est précisément ce code qui ne fonctionnait pas, ou un autre ?

Peut-être y a-t-il une petite erreur dans le code qui ne fonctionnait pas...

Hors ligne

#16 Le 30/06/2015, à 09:41

izd

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

Précisément celui là, et de différentes manières (Text File, File of Integer, etc... ) ainsi que via un flux (TFileStream) avec qui cela ne fonctionne toujours pas.
Difficile de faire une erreur dans un code de 4 lignes... wink

Je ne vais pas me mettre la ratte au cours bouillon, ça fonctionne, c'est l'essentiel.

Il faut savoir que Lazarus/Fpc sont encore en cours de développement (Lazarus en RC par exemple) et que de vilains bugs traînent encore.
Hier encore, j'ai dû faire un ctrl-alt-backspace après avoir totalement gelé le système pendant une séance de débogage (certes, dans un thread).


Fiat Lux GNU/Linux !

Config 1: Mint 17.3x64~Cinnamon @ GIGABYTE GA-H77-D3H / i5-3570K - 3.4 GHz - GTX 970 / ram 2x4@1600 / ssd 120Go / 1To+1To+2To
Config 2: Mint 17.3x64~Cinnamon @ ASUS M3N78-EM / AMD Athlon 7750x2 @2.70GHz / ram 6Go / GeForce 210  / ssd 120Go + 750Go + 500Go@RAID 1

Hors ligne

#17 Le 30/06/2015, à 09:45

tiramiseb

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

À vrai dire je me demande pourquoi ce langage est encore appris.

À la limite, utilisé par ceux qui connaissent, je veux bien...
Mais à part ça, je ne vois pas ce qu'il apporte.

(c'est un vrai questionnement hein, je n'arrive pas à voir ce qu'il a d'attirant)

Hors ligne

#18 Le 30/06/2015, à 09:51

izd

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

Pour faire court :
1°) Il y a tout ce qui faut pour programmer dans (quasi) tous les domaines
2°) Programmation objet
2°) Code final de qualité
3°) Clarté du code

Un vrai langage de programmation en somme !


Fiat Lux GNU/Linux !

Config 1: Mint 17.3x64~Cinnamon @ GIGABYTE GA-H77-D3H / i5-3570K - 3.4 GHz - GTX 970 / ram 2x4@1600 / ssd 120Go / 1To+1To+2To
Config 2: Mint 17.3x64~Cinnamon @ ASUS M3N78-EM / AMD Athlon 7750x2 @2.70GHz / ram 6Go / GeForce 210  / ssd 120Go + 750Go + 500Go@RAID 1

Hors ligne

#19 Le 30/06/2015, à 09:59

tiramiseb

Re : [RÉSOLU] Comment lire des fichiers non vide de Taille 0x00 ZÉRO !

Bon, pour 1° et le 1er 2° on retrouve ça dans d'autres langages, du coup ce n'est à mon sens pas un "mieux" de FreePascal par rapport à, par exemple, Python.

Pour le 2e 2° et le 3°, je ne suis pas vraiment d'accord.

Ce bout de code, déjà je ne trouve pas ça extrêmement clair.
Pourquoi des majuscules dans les noms de fonctions et de variables ? Quelle est l'utilité des points-virgules en fin de ligne ?

AssignFile(File1, '/proc/sys/net/ipv4/ip_forward');
Reset(File1);
Read(File1, Str);
Writeln(Str);
CloseFile(File1);

... et j'ajoute à ça que, justement, ce bout de code ce n'est pas de la programmation objet.

L'équivalent en Python (et en objet) peut être :

f = open('/proc/sys/net/ipv4/ip_forward')
value = f.read()
print value
f.close()

Je trouve ça bien plus clair et propre...

Si on veut aller au plus court, on peut même faire :

print open('/proc/sys/net/ipv4/ip_forward').read()

Dernière modification par tiramiseb (Le 30/06/2015, à 10:01)

Hors ligne