bisogno di accennare con un'utility a riga di comando di Linux / UNIX personalizzati “chiamata” in C

StackOverflow https://stackoverflow.com/questions/702639

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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top