bisogno di accennare con un'utility a riga di comando di Linux / UNIX personalizzati “chiamata” in C
-
22-08-2019 - |
Domanda
Ok ho bisogno di fare questo programma per visualizzare "cal
" tre mesi (un mese prima e un mese dopo) fianco a fianco, piuttosto che appena un mese singola viene visualizzato in qualsiasi Linux / UNIX. Ho ottenuto che funziona per visualizzare 3 calendario utilizzando "system(customCommand)
" tre volte; ma d'altra parte non è fianco a fianco.
ho avuto qualche suggerimento per utilizzare il sistema a seguito di inviti:
close(..) pipe(..) dup2(..) read(..) and write(..)
la mia domanda è cosa devo iniziare? Ho bisogno di creare processo figlio e poi lo prende in pipe(..)
?
Come posso visualizzare tre lati del calendario a fianco.
es.
February 2009 March 2009 April 2009
S M Tu W Th F S S M Tu W Th F S S M Tu W Th F S
1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4
8 9 10 11 12 13 14 8 9 10 11 12 13 14 5 6 7 8 9 10 11
15 16 17 18 19 20 21 15 16 17 18 19 20 21 12 13 14 15 16 17 18
22 23 24 25 26 27 28 22 23 24 25 26 27 28 19 20 21 22 23 24 25
29 30 31 26 27 28 29 30
Soluzione
Supponendo che vuole scrivere da soli invece di utilizzare "cal -3", cosa farei (nel codice pseudo):
popen three calls to "cal" with the appropriate args
while (at least one of the three pipes hasn't hit EOF yet)
{
read a line from the first if it isn't at EOF
pad the results out to a width W, print it
read a line from the second if it isn't at EOF
pad the results out to a width W, print it
read a line from the third if it isn't at EOF
print it
print "\n"
}
pclose all three.
Altri suggerimenti
se "cal -3" non funziona, basta usare pasta:)
$ TERM=linux setterm -regtabs 24
$ paste <(cal 2 2009) <(cal 3 2009) <(cal 4 2009)
febbraio 2009 marzo 2009 aprile 2009
do lu ma me gi ve sa do lu ma me gi ve sa do lu ma me gi ve sa
1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4
8 9 10 11 12 13 14 8 9 10 11 12 13 14 5 6 7 8 9 10 11
15 16 17 18 19 20 21 15 16 17 18 19 20 21 12 13 14 15 16 17 18
22 23 24 25 26 27 28 22 23 24 25 26 27 28 19 20 21 22 23 24 25
29 30 31 26 27 28 29 30
$
(setterm
ignora -regtabs
meno TERM=linux
o TERM=con
)
solo fare
cal -3
Questo non funziona?
cal -3
Ok, che ne dici di cal -3
?
cal -3 12 2120
per renderlo un mese speciale e l'anno, con uno prima e uno dopo.
L'approccio che userei per questo sarebbe per catturare l'uscita, dividerlo in linee, e printf le linee fuori uno accanto all'altro. Probabilmente mi faccio in Perl, però, invece di C.
o semplicemente usare cal -3, se il vostro cal ha.