Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[C] Programma C e Variabili della Bash ? error lib. readline
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
_sys/sid
Guru
Guru


Joined: 27 Aug 2004
Posts: 346
Location: Asola (Mantova)

PostPosted: Sat Oct 09, 2004 12:32 pm    Post subject: [C] Programma C e Variabili della Bash ? error lib. readline Reply with quote

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:
Code:
# echo $COLUMNS

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
View user's profile Send private message
Gavrila
Apprentice
Apprentice


Joined: 08 Jun 2003
Posts: 275

PostPosted: Sat Oct 09, 2004 12:40 pm    Post subject: Re: [C] Programma C e Variabili della Bash ? Reply with quote

Passarli come parametri al programma?
Back to top
View user's profile Send private message
mouser
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1419
Location: Milano

PostPosted: Sat Oct 09, 2004 12:46 pm    Post subject: Reply with quote

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 :wink:
Back to top
View user's profile Send private message
tchernobog
n00b
n00b


Joined: 05 Jan 2004
Posts: 29

PostPosted: Sat Oct 09, 2004 12:47 pm    Post subject: Re: [C] Programma C e Variabili della Bash ? Reply with quote

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
View user's profile Send private message
_sys/sid
Guru
Guru


Joined: 27 Aug 2004
Posts: 346
Location: Asola (Mantova)

PostPosted: Sat Oct 09, 2004 12:49 pm    Post subject: Reply with quote

a quello ci avevo gia' pensato..
ma mi serve qualcosa che lo faccia internamente...
_________________
http://th30z.netsons.org/
Back to top
View user's profile Send private message
mouser
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1419
Location: Milano

PostPosted: Sat Oct 09, 2004 12:49 pm    Post subject: Reply with quote

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
View user's profile Send private message
_sys/sid
Guru
Guru


Joined: 27 Aug 2004
Posts: 346
Location: Asola (Mantova)

PostPosted: Sat Oct 09, 2004 12:50 pm    Post subject: Reply with quote

...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
View user's profile Send private message
tchernobog
n00b
n00b


Joined: 05 Jan 2004
Posts: 29

PostPosted: Sat Oct 09, 2004 12:52 pm    Post subject: Reply with quote

scusa, avevo modificato il mio mess e non so se hai notato:

Code:

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)
Back to top
View user's profile Send private message
_sys/sid
Guru
Guru


Joined: 27 Aug 2004
Posts: 346
Location: Asola (Mantova)

PostPosted: Sat Oct 09, 2004 12:53 pm    Post subject: Reply with quote

getenv() non funziona... COLUMNS non e' negli env.

prova a digitare da una shell
Code:
# env

non c'e'... e' una variabile propria della bash e non e' "globale"...
_________________
http://th30z.netsons.org/
Back to top
View user's profile Send private message
_sys/sid
Guru
Guru


Joined: 27 Aug 2004
Posts: 346
Location: Asola (Mantova)

PostPosted: Sat Oct 09, 2004 1:08 pm    Post subject: Reply with quote

@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
View user's profile Send private message
n3m0
l33t
l33t


Joined: 08 Feb 2004
Posts: 798
Location: Richville, Naples, Italy, Europe

PostPosted: Sat Oct 09, 2004 1:20 pm    Post subject: Reply with quote

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?
_________________
L’energia è la civiltà. Lasciarla in mano ai piromani/petrolieri è criminale. Perché aspettare che finisca il petrolio?
L’età della pietra non è mica finita per mancanza di pietre. - B.G.


Site/Blog: http://www.neminis.org
Back to top
View user's profile Send private message
_sys/sid
Guru
Guru


Joined: 27 Aug 2004
Posts: 346
Location: Asola (Mantova)

PostPosted: Sat Oct 09, 2004 1:26 pm    Post subject: Reply with quote

in che libreria si trova ???
mi potresti fare un esempio di utilizzo...

grazie.
_________________
http://th30z.netsons.org/
Back to top
View user's profile Send private message
n3m0
l33t
l33t


Joined: 08 Feb 2004
Posts: 798
Location: Richville, Naples, Italy, Europe

PostPosted: Sat Oct 09, 2004 1:41 pm    Post subject: Reply with quote

_sys/sid wrote:
in che libreria si trova ???


Ehm, l'avrei gia' scritto :P
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.
_________________
L’energia è la civiltà. Lasciarla in mano ai piromani/petrolieri è criminale. Perché aspettare che finisca il petrolio?
L’età della pietra non è mica finita per mancanza di pietre. - B.G.


Site/Blog: http://www.neminis.org
Back to top
View user's profile Send private message
n3m0
l33t
l33t


Joined: 08 Feb 2004
Posts: 798
Location: Richville, Naples, Italy, Europe

PostPosted: Sat Oct 09, 2004 1:44 pm    Post subject: Reply with quote

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.
_________________
L’energia è la civiltà. Lasciarla in mano ai piromani/petrolieri è criminale. Perché aspettare che finisca il petrolio?
L’età della pietra non è mica finita per mancanza di pietre. - B.G.


Site/Blog: http://www.neminis.org
Back to top
View user's profile Send private message
randomaze
Bodhisattva
Bodhisattva


Joined: 21 Oct 2003
Posts: 9985

PostPosted: Sat Oct 09, 2004 6:27 pm    Post subject: Reply with quote

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.
Code:
man 3 history

per i dettagli
_________________
Ciao da me!
Back to top
View user's profile Send private message
_sys/sid
Guru
Guru


Joined: 27 Aug 2004
Posts: 346
Location: Asola (Mantova)

PostPosted: Sun Oct 10, 2004 9:42 am    Post subject: Reply with quote

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
View user's profile Send private message
n3m0
l33t
l33t


Joined: 08 Feb 2004
Posts: 798
Location: Richville, Naples, Italy, Europe

PostPosted: Sun Oct 10, 2004 12:52 pm    Post subject: Reply with quote

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?
_________________
L’energia è la civiltà. Lasciarla in mano ai piromani/petrolieri è criminale. Perché aspettare che finisca il petrolio?
L’età della pietra non è mica finita per mancanza di pietre. - B.G.


Site/Blog: http://www.neminis.org
Back to top
View user's profile Send private message
_sys/sid
Guru
Guru


Joined: 27 Aug 2004
Posts: 346
Location: Asola (Mantova)

PostPosted: Sun Oct 10, 2004 3:35 pm    Post subject: Reply with quote

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
View user's profile Send private message
tchernobog
n00b
n00b


Joined: 05 Jan 2004
Posts: 29

PostPosted: Sun Oct 10, 2004 5:38 pm    Post subject: Reply with quote

_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
View user's profile Send private message
n3m0
l33t
l33t


Joined: 08 Feb 2004
Posts: 798
Location: Richville, Naples, Italy, Europe

PostPosted: Sun Oct 10, 2004 8:57 pm    Post subject: Reply with quote

_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.
_________________
L’energia è la civiltà. Lasciarla in mano ai piromani/petrolieri è criminale. Perché aspettare che finisca il petrolio?
L’età della pietra non è mica finita per mancanza di pietre. - B.G.


Site/Blog: http://www.neminis.org
Back to top
View user's profile Send private message
randomaze
Bodhisattva
Bodhisattva


Joined: 21 Oct 2003
Posts: 9985

PostPosted: Mon Oct 11, 2004 7:05 am    Post subject: Reply with quote

tchernobog wrote:
prova a invertire l'ordine di inclusione degli headers... prima stdio.h


Quoto
_________________
Ciao da me!
Back to top
View user's profile Send private message
_sys/sid
Guru
Guru


Joined: 27 Aug 2004
Posts: 346
Location: Asola (Mantova)

PostPosted: Mon Oct 11, 2004 1:38 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum