View previous topic :: View next topic |
Author |
Message |
_sys/sid Guru
Joined: 27 Aug 2004 Posts: 346 Location: Asola (Mantova)
|
Posted: Sat Oct 09, 2004 12:32 pm Post subject: [C] Programma C e Variabili della Bash ? error lib. readline |
|
|
Quote: |
Builtin Shell Variables
* COLUMNS Numbers of columns on the display
* HISTSIZE Number of commands in command history (default 500)
* LINES Numbers of lines on the display
|
Dovrei da un programma C ricavare le dimensioni della Bash in uso...
Solo che queste variabili non so' come andarle a prendere...
se digito:
vedo il valore ma non e' un environment e quindi non posso prenderla con getenv()..
Qualcuno sa' come posso fare ??? _________________ http://th30z.netsons.org/
Last edited by _sys/sid on Sun Oct 10, 2004 9:57 am; edited 1 time in total |
|
Back to top |
|
|
Gavrila Apprentice
Joined: 08 Jun 2003 Posts: 275
|
Posted: Sat Oct 09, 2004 12:40 pm Post subject: Re: [C] Programma C e Variabili della Bash ? |
|
|
Passarli come parametri al programma? |
|
Back to top |
|
|
mouser Veteran
Joined: 10 Aug 2004 Posts: 1419 Location: Milano
|
Posted: Sat Oct 09, 2004 12:46 pm Post subject: |
|
|
Sicuramente il passarli come parametri è la soluzione.
Comunque ritengo che possa essere interessante sapere se da C è possibile andare a leggere le variabili di ambiente di bash....
Insomma, con system(...) si possono eseguire comandi, magarì esiste un'altra funzione che, oltre ad eseguire il comando, restituisce l'output..
Byez
mouser |
|
Back to top |
|
|
tchernobog n00b
Joined: 05 Jan 2004 Posts: 29
|
Posted: Sat Oct 09, 2004 12:47 pm Post subject: Re: [C] Programma C e Variabili della Bash ? |
|
|
Esempio :
Code: | gcc -O3 -o main -DBASH_COLUMNS=$COLUMNS main.c |
usare gli autotools per programmini più grossi è d'obbligo. Usa BASH_COLUMNS come se fosse un #define dentro al programma.
Se usi la tua app dentro a un xterm ridimensionabile, auguri ad ogni modo.
Io userei getenv(). _________________ One of the universal rules of happiness is: always be wary of any helpful item that weighs less than its operating manual. -- (Terry Pratchett, Jingo)
Last edited by tchernobog on Sat Oct 09, 2004 12:49 pm; edited 1 time in total |
|
Back to top |
|
|
_sys/sid Guru
Joined: 27 Aug 2004 Posts: 346 Location: Asola (Mantova)
|
Posted: Sat Oct 09, 2004 12:49 pm Post subject: |
|
|
a quello ci avevo gia' pensato..
ma mi serve qualcosa che lo faccia internamente... _________________ http://th30z.netsons.org/ |
|
Back to top |
|
|
mouser Veteran
Joined: 10 Aug 2004 Posts: 1419 Location: Milano
|
Posted: Sat Oct 09, 2004 12:49 pm Post subject: |
|
|
Si, ma quando vai ad eseguire lo stesso programma su un'altra macchina, cosa succede????
Non c'è qualche funzione che permetta di andarli a leggere a run-time? |
|
Back to top |
|
|
_sys/sid Guru
Joined: 27 Aug 2004 Posts: 346 Location: Asola (Mantova)
|
Posted: Sat Oct 09, 2004 12:50 pm Post subject: |
|
|
...ma mi serve qualcosa che lo faccia internamente...
Quote: | si possono eseguire comandi, magarì esiste un'altra funzione che, oltre ad eseguire il comando, restituisce l'output. |
Avevo provato la popen() ma facendo popen(<comando>, <modalita>);
ma non fa' al caso mio...
Non e' negli env quindi non posso usare getenv() _________________ http://th30z.netsons.org/
Last edited by _sys/sid on Sat Oct 09, 2004 12:52 pm; edited 1 time in total |
|
Back to top |
|
|
tchernobog n00b
Joined: 05 Jan 2004 Posts: 29
|
Posted: Sat Oct 09, 2004 12:52 pm Post subject: |
|
|
scusa, avevo modificato il mio mess e non so se hai notato:
_________________ One of the universal rules of happiness is: always be wary of any helpful item that weighs less than its operating manual. -- (Terry Pratchett, Jingo) |
|
Back to top |
|
|
_sys/sid Guru
Joined: 27 Aug 2004 Posts: 346 Location: Asola (Mantova)
|
Posted: Sat Oct 09, 2004 12:53 pm Post subject: |
|
|
getenv() non funziona... COLUMNS non e' negli env.
prova a digitare da una shell
non c'e'... e' una variabile propria della bash e non e' "globale"... _________________ http://th30z.netsons.org/ |
|
Back to top |
|
|
_sys/sid Guru
Joined: 27 Aug 2004 Posts: 346 Location: Asola (Mantova)
|
Posted: Sat Oct 09, 2004 1:08 pm Post subject: |
|
|
@mouser: man popen
Code: |
#include <stdio.h>
int main() {
char system_name[(1024+1)];
size_t byte;
FILE *pp;
if ((pp = popen("uname -rm", "r")) != NULL) {
if ((byte = fread(system_name, sizeof(char), 1024, pp)) > 0) {
system_name[byte] = '\0';
puts(system_name);
}
pclose(pp);
}
return(0);
}
|
_________________ http://th30z.netsons.org/ |
|
Back to top |
|
|
n3m0 l33t
Joined: 08 Feb 2004 Posts: 798 Location: Richville, Naples, Italy, Europe
|
Posted: Sat Oct 09, 2004 1:20 pm Post subject: |
|
|
La documentazione della libreria readline wrote: | Code: | Function: void rl_get_screen_size (int *rows, int *cols)
Return Readline's idea of the terminal's size in the variables pointed to by the arguments. |
|
E' quello che fa al caso tuo? _________________ Lenergia è la civiltà. Lasciarla in mano ai piromani/petrolieri è criminale. Perché aspettare che finisca il petrolio?
Letà della pietra non è mica finita per mancanza di pietre. - B.G.
Site/Blog: http://www.neminis.org |
|
Back to top |
|
|
_sys/sid Guru
Joined: 27 Aug 2004 Posts: 346 Location: Asola (Mantova)
|
Posted: Sat Oct 09, 2004 1:26 pm Post subject: |
|
|
in che libreria si trova ???
mi potresti fare un esempio di utilizzo...
grazie. _________________ http://th30z.netsons.org/ |
|
Back to top |
|
|
n3m0 l33t
Joined: 08 Feb 2004 Posts: 798 Location: Richville, Naples, Italy, Europe
|
Posted: Sat Oct 09, 2004 1:41 pm Post subject: |
|
|
_sys/sid wrote: | in che libreria si trova ??? |
Ehm, l'avrei gia' scritto
Cmq, è
Code: | * sys-libs/readline
Latest version available: 5.0-r1
Latest version installed: 5.0-r1
Size of downloaded files: 1,777 kB
Homepage: http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
Description: Another cute console display library
License: GPL-2 |
_sys/sid wrote: | mi potresti fare un esempio di utilizzo... |
Beh, non l'ho mai usata, ma credo che la documentazione parli chiaro.
Credo basti:
Code: | #include <readline.h>
int main () {
int r, c;
rl_get_screen_size(&r, &c);
printf("Le colonne del terminale sono: %d", c);
} |
ma ho scritto a volo senza testare, potrebbe essere sbagliato. _________________ Lenergia è la civiltà. Lasciarla in mano ai piromani/petrolieri è criminale. Perché aspettare che finisca il petrolio?
Letà della pietra non è mica finita per mancanza di pietre. - B.G.
Site/Blog: http://www.neminis.org |
|
Back to top |
|
|
n3m0 l33t
Joined: 08 Feb 2004 Posts: 798 Location: Richville, Naples, Italy, Europe
|
Posted: Sat Oct 09, 2004 1:44 pm Post subject: |
|
|
Ah ovviamente questa serve solo per ricavare il numero di colonne e righe di un terminale.
Per le restanti variabili (credo che nel tuo caso rimanga solo HISTSIZE) di bash che ti servono, immagino che se cerchi troverai qualcosa. _________________ Lenergia è la civiltà. Lasciarla in mano ai piromani/petrolieri è criminale. Perché aspettare che finisca il petrolio?
Letà della pietra non è mica finita per mancanza di pietre. - B.G.
Site/Blog: http://www.neminis.org |
|
Back to top |
|
|
randomaze Bodhisattva
Joined: 21 Oct 2003 Posts: 9985
|
Posted: Sat Oct 09, 2004 6:27 pm Post subject: |
|
|
n3m0 wrote: | Per le restanti variabili (credo che nel tuo caso rimanga solo HISTSIZE) di bash che ti servono, immagino che se cerchi troverai qualcosa. |
bash usa le librerie readline e history combinate.
per i dettagli _________________ Ciao da me! |
|
Back to top |
|
|
_sys/sid Guru
Joined: 27 Aug 2004 Posts: 346 Location: Asola (Mantova)
|
Posted: Sun Oct 10, 2004 9:42 am Post subject: |
|
|
Ho sistemato un po' il programmino di n3m0...
Code: |
#include <readline/readline.h>
#include <stdio.h>
int main () {
int r, c;
rl_get_screen_size(&r, &c);
printf("Le colonne del terminale sono: %d", c);
return(0);
}
|
solo che quando lo compilo con gcc -Wall pgmcolonne.c -o pgmcolonne ottengo questi errori:
Code: |
In file included from /usr/include/readline/readline.h:37,
from pgmcolonne.c:1:
/usr/include/readline/rltypedefs.h:65: error: syntax error before '*' token
In file included from pgmcolonne.c:1:
/usr/include/readline/readline.h:400: error: syntax error before '*' token
/usr/include/readline/readline.h:516: error: syntax error before '*' token
/usr/include/readline/readline.h:517: error: syntax error before '*' token
/usr/include/readline/readline.h:779: error: syntax error before "FILE"
/usr/include/readline/readline.h:790: error: syntax error before '}' token
|
Questi errori sembrano sulla libreria readline... Come mai ???
Come posso risolvere ?? _________________ http://th30z.netsons.org/ |
|
Back to top |
|
|
n3m0 l33t
Joined: 08 Feb 2004 Posts: 798 Location: Richville, Naples, Italy, Europe
|
Posted: Sun Oct 10, 2004 12:52 pm Post subject: |
|
|
Ti posso solo dire che hai bisogno di compilare almeno così:
Code: | gcc programmareadline.c -lreadline -lcurses |
Il fatto strano è che gli errori che hai tu non sono dovuti al linker, ma proprio ad errori sintattici in readline.h, che mi pare alquanto strano.
Che versione di readline hai? _________________ Lenergia è la civiltà. Lasciarla in mano ai piromani/petrolieri è criminale. Perché aspettare che finisca il petrolio?
Letà della pietra non è mica finita per mancanza di pietre. - B.G.
Site/Blog: http://www.neminis.org |
|
Back to top |
|
|
_sys/sid Guru
Joined: 27 Aug 2004 Posts: 346 Location: Asola (Mantova)
|
Posted: Sun Oct 10, 2004 3:35 pm Post subject: |
|
|
Ho sys-libs/readline-4.3-r5
anche compilandolo come hai detto tu mi da' gli stessi errori. _________________ http://th30z.netsons.org/ |
|
Back to top |
|
|
tchernobog n00b
Joined: 05 Jan 2004 Posts: 29
|
Posted: Sun Oct 10, 2004 5:38 pm Post subject: |
|
|
_sys/sid wrote: | Ho sys-libs/readline-4.3-r5
anche compilandolo come hai detto tu mi da' gli stessi errori. |
prova a invertire l'ordine di inclusione degli headers... prima stdio.h _________________ One of the universal rules of happiness is: always be wary of any helpful item that weighs less than its operating manual. -- (Terry Pratchett, Jingo) |
|
Back to top |
|
|
n3m0 l33t
Joined: 08 Feb 2004 Posts: 798 Location: Richville, Naples, Italy, Europe
|
Posted: Sun Oct 10, 2004 8:57 pm Post subject: |
|
|
_sys/sid wrote: | Ho sys-libs/readline-4.3-r5
anche compilandolo come hai detto tu mi da' gli stessi errori. |
Infatti i miei suggerimenti servono ad avere una corretta esecuzione della fase di linking.
Gli errori che hai tu sono apparentemente dovuti ad errori sintattici nei file /usr/include/readline/rltypedefs.h e /usr/include/readline/readline.h.
Prova a spulciarci alle righe che ti vengono segnalate per capire se c'e' qualche errore semplice da correggere.
A me compila tutto, ma io ho la versione 5.0 delle readline. _________________ Lenergia è la civiltà. Lasciarla in mano ai piromani/petrolieri è criminale. Perché aspettare che finisca il petrolio?
Letà della pietra non è mica finita per mancanza di pietre. - B.G.
Site/Blog: http://www.neminis.org |
|
Back to top |
|
|
randomaze Bodhisattva
Joined: 21 Oct 2003 Posts: 9985
|
Posted: Mon Oct 11, 2004 7:05 am Post subject: |
|
|
tchernobog wrote: | prova a invertire l'ordine di inclusione degli headers... prima stdio.h |
Quoto _________________ Ciao da me! |
|
Back to top |
|
|
_sys/sid Guru
Joined: 27 Aug 2004 Posts: 346 Location: Asola (Mantova)
|
Posted: Mon Oct 11, 2004 1:38 pm Post subject: |
|
|
Adesso lo compila.. ma non funziona...
Code: |
$ gcc provar.c -lreadline -lcurses -o provar
nemo@minasTirith [nemo] $ ./provar
Le colonne del terminale sono: 0, righe 0
|
Code: |
nemo@minasTirith [nemo] $ cat provar.c
#include <stdio.h>
#include <readline/readline.h>
int main () {
int r, c;
rl_get_screen_size(&r, &c);
printf("Le colonne del terminale sono: %d, righe %d\r\n", c, r);
return(0);
}
|
@n3m0: ma io ho la versione 5.0 delle readline... TU HAI ~ARCH _________________ http://th30z.netsons.org/ |
|
Back to top |
|
|
|