Déclarer une variable à partir d'un fichier
Résolu/Fermé
Maximilien LIX
Messages postés
311
Date d'inscription
jeudi 25 juillet 2013
Statut
Membre
Dernière intervention
30 octobre 2014
-
Modifié par Maximilien LIX le 1/07/2014 à 02:06
Maximilien LIX Messages postés 311 Date d'inscription jeudi 25 juillet 2013 Statut Membre Dernière intervention 30 octobre 2014 - 1 juil. 2014 à 12:35
Maximilien LIX Messages postés 311 Date d'inscription jeudi 25 juillet 2013 Statut Membre Dernière intervention 30 octobre 2014 - 1 juil. 2014 à 12:35
A voir également:
- Déclarer une variable à partir d'un fichier
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier host - Guide
3 réponses
Utilisateur anonyme
1 juil. 2014 à 08:34
1 juil. 2014 à 08:34
Ce qui est important est de connaître la forme du fichier contenant l'information nombre d'octets de mon disque dur...
Analyser un fichier sans en connaître les tenants et aboutissants, c'est difficile !
suffira...
En général pour récupérer ce genre d'information, on aime bien fscanf.
Analyser un fichier sans en connaître les tenants et aboutissants, c'est difficile !
char lecture_disk_size[TAILLE_MAX];
suffira...
En général pour récupérer ce genre d'information, on aime bien fscanf.
Twinuts
Messages postés
5375
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
14 juin 2023
2
Modifié par Twinuts le 1/07/2014 à 10:37
Modifié par Twinuts le 1/07/2014 à 10:37
Salut,
Ma réponse est relativement hors sujet avec la question mais, une autre piste qui vaut ce qu'elle vaut, serait de remplacer le script bash par du lua et ainsi étendre les possibilités de ton script... tout en utilisant l'API lua en C:
Petit exemple:
Le fichier C (lua_disk.c)
Le script lua (lua_disk.lua):
Compilation apres avoir installé les lib lua
gcc lua_disk.c -o lua_disk -llua -lm -ldl
ou
gcc -I<includes_lua> -L<libs_lua> lua_disk.c -o lua_disk -llua -lm -ldl
Dans cet exemple le script Lua est placé au meme niveau que l'exécutable 'lua_disk'
Dev addict
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
Ma réponse est relativement hors sujet avec la question mais, une autre piste qui vaut ce qu'elle vaut, serait de remplacer le script bash par du lua et ainsi étendre les possibilités de ton script... tout en utilisant l'API lua en C:
Petit exemple:
Le fichier C (lua_disk.c)
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <lua.h> #include <lauxlib.h> #define LUA_FILE "lua_disk.lua" #define DEVICE "/dev/sda" int main(int argc, char** argv) { int error, disk_size; /* init de la stack Lua */ lua_State *ll = luaL_newstate(); if(!ll) { fprintf(stderr, "Unable to create Lua state variable.\n"); return EXIT_FAILURE; } /* Chargement des lib Lua */ luaL_openlibs(ll); /* Chargement du script */ if (luaL_loadfile(ll, LUA_FILE)) { fprintf(stderr, "Unable to load the Lua file.\n"); return EXIT_FAILURE; } /* Cet appel permet le chargement des variables & co du script lua */ if (lua_pcall(ll, 0, 0, 0)) { fprintf(stderr, "Unable to initialize the lua pcall: '%s'.\n", lua_tostring(ll, -1)); return EXIT_FAILURE; } /* preparation de l'appel de la fonction getDiskSize */ lua_getglobal(ll, "getDiskSize"); /* passe le nom de la partition en parametre */ lua_pushlstring(ll, DEVICE, strlen(DEVICE)); /* appel de la fonction */ error = lua_pcall(ll, 1, 1, 0); if(error) { fprintf(stderr, "'getDiskSize'. Error %d ('%s')\n", error, lua_tostring(ll, -1)); return EXIT_FAILURE; } /* recuperation du retour de la fonction getDiskSize */ /* Ici le retour est de type int */ if (!lua_isnumber(ll, -1)) { fprintf(stderr, "function 'getDiskSize' must return a number\n"); return EXIT_FAILURE; } disk_size = lua_tointeger(ll, -1); lua_pop(ll, 1); /* depile la valeur retournee */ printf("Disk size from LUA: %d\n", disk_size); /* close les ressources lua */ lua_close(ll); return EXIT_SUCCESS; }
Le script lua (lua_disk.lua):
-- Fonction split recuperee ici : http://snippets.luacode.org/snippets/Split_a_string_into_a_list_5
function split(s,re)
local i1 = 1
local ls = {}
local append = table.insert
if not re then re = '%s+' end
if re == '' then return {s} end
while true do
local i2,i3 = s:find(re,i1)
if not i2 then
local last = s:sub(i1)
if last ~= '' then append(ls,last) end
if #ls == 1 and ls[1] == '' then
return {}
else
return ls
end
end
append(ls,s:sub(i1,i2-1))
i1 = i3+1
end
end
---
-- Exemple de code fait avec LUA 5.2
-- Attention en LUA un tableau commence par 1 et non 0
-- En LUA >5.2 la taille d'un tableau ce calcul comme suit the_size = #my_array
function getDiskSize(device)
-- execution de la command systeme
local f = io.popen("df " .. device .. " | tail -n 1")
-- lecture de la reponse
local l = f:read("*a")
-- fermeture du pipe
f:close()
-- split de la reponse pour recuperer le champ Available
local result = split(l)
-- conversion du retour en int
return tonumber(result[4])
end
Compilation apres avoir installé les lib lua
gcc lua_disk.c -o lua_disk -llua -lm -ldl
ou
gcc -I<includes_lua> -L<libs_lua> lua_disk.c -o lua_disk -llua -lm -ldl
Dans cet exemple le script Lua est placé au meme niveau que l'exécutable 'lua_disk'
Dev addict
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
Maximilien LIX
Messages postés
311
Date d'inscription
jeudi 25 juillet 2013
Statut
Membre
Dernière intervention
30 octobre 2014
23
1 juil. 2014 à 12:35
1 juil. 2014 à 12:35
Ah mais oui fscanf ! Merci ! :D
Pour le lua ça à l'air très intéressant merci du conseil :)
Pour le lua ça à l'air très intéressant merci du conseil :)