[C] avviare un comando linux ad una certa data e ora

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
DamianFox
Prode Principiante
Messaggi: 42
Iscrizione: lunedì 14 maggio 2012, 16:31
Desktop: unity
Distribuzione: Ubuntu 12.10

[C] avviare un comando linux ad una certa data e ora

Messaggio da DamianFox »

Ciao a tutti!! Prima di tutto volevo salutarvi in quanto mi sono iscritto da poco in questo forum.

Allora il mio problema è il seguente: dovrei implementare un comando in linux, chiamato dcmd, che ha la seguente funzione:
deve eseguire un altro comando linux di default ad una certa data ed ora specificata, entrambi specificati in input

In poche parole nel terminale dovrei scrivere così: dcmd <comando> <data e ora>.

Per la data sono a buon punto, infatti riesco a gestirla in modo corretto; guardando se è nel futuro; se il giorno, mese, anno sono corretti ecc..
Anche il comando credo di aver capito come gestirlo: ho usato la system call execlp e me lo esegue correttamente.

Bene, a questo punto non sono come unire comando e data, cioè eseguire il comando indicato nell'ora indicata.

Qualcuno mi potrebbe spiegare come fare?? :muro:

Grazie! :)
Ultima modifica di DamianFox il sabato 19 maggio 2012, 15:17, modificato 2 volte in totale.
Carlin0
Rampante Reduce
Rampante Reduce
Messaggi: 7453
Iscrizione: lunedì 2 novembre 2009, 15:29
Desktop: Gnome 2.30.2
Distribuzione: Debian Squeeze
Località: Augusta Taurinorum

Re: avviare un comando linux ad una certa data e ora

Messaggio da Carlin0 »

Provato con cronotab ? dovrebbe fare proprio al caso tuo ...
Avatar utente
DamianFox
Prode Principiante
Messaggi: 42
Iscrizione: lunedì 14 maggio 2012, 16:31
Desktop: unity
Distribuzione: Ubuntu 12.10

Re: avviare un comando linux ad una certa data e ora

Messaggio da DamianFox »

Scusami ma sono ancora alle prime armi con linux, cosa devo fare con crontab?
Avatar utente
Laycastle
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1183
Iscrizione: sabato 9 aprile 2011, 21:54
Desktop: KDE 4.8
Distribuzione: Gentoo ~amd64
Località: Torino

Re: avviare un comando linux ad una certa data e ora

Messaggio da Laycastle »

la via più breve tra due punti è l'arabesco.
Avatar utente
difesaparcosempione
Rampante Reduce
Rampante Reduce
Messaggi: 6031
Iscrizione: giovedì 27 luglio 2006, 19:06
Località: Torino
Contatti:

Re: avviare un comando linux ad una certa data e ora

Messaggio da difesaparcosempione »

puoi usare anche il comando at

man 1 at
per avere il manuale
ciao
Avatar utente
DamianFox
Prode Principiante
Messaggi: 42
Iscrizione: lunedì 14 maggio 2012, 16:31
Desktop: unity
Distribuzione: Ubuntu 12.10

Re: avviare un comando linux ad una certa data e ora

Messaggio da DamianFox »

grazie a tutti delle risposte!!
Comunque io dovrei implementare un comando che abbia circa le stesse funzioni di "crontab" e "at".

Io pensavo di creare uno script, con scritto "crontab" o "at", poi il comando e la data che passo in input..
Ovviamente lo script vorrei modificarlo attraverso il mio file.c

Potrebbe essere una buona idea??
Avatar utente
$nake
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2432
Iscrizione: venerdì 24 febbraio 2012, 5:19
Desktop: Ubuntu "3D"
Distribuzione: Ubuntu 14.04 LTS x86_64
Località: Italia

Re: avviare un comando linux ad una certa data e ora

Messaggio da $nake »

Forse non hai capito che crontab deve aprire il tuo script.Ti conviene anche a livello di tempo,se fai script in bash,se poi fai script in python o altri linguaggi e vuoi personalizzare puoi anche lasciare perdere cron,ma se vuoi avviare un comando ogni volta ti conviene avviare direttamente con cron,dopo che ci fai l'abitudine vedrai che è semplicissimo...
Se insisti e persisiti raggiungi e conquisti!|||Non tutto il male viene per nuocere!|||Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi...(Albert Einstein )|||Umuntu ngumuntu ngabantu, "io sono ciò che sono in virtù di ciò che tutti siamo".
Avatar utente
DamianFox
Prode Principiante
Messaggi: 42
Iscrizione: lunedì 14 maggio 2012, 16:31
Desktop: unity
Distribuzione: Ubuntu 12.10

Re: avviare un comando linux ad una certa data e ora

Messaggio da DamianFox »

Forse ho trovato un modo per eseguire il comando ad una certa ora senza usare uno script usando la system call "fork" con l' "exec". Al processo figlio generato faccio eseguire il comando, mentre il processo padre va avanti.. Nel processo figlio vorrei usare la system call "sleep" che mette in pausa il processo per il tempo necessario (cioè aspetto un tot di secondi, poi eseguo il comando con l'exec).

Secondo voi è valido come ragionamento?? Potrebbe causare dei processi zombie??

P.S. Il processo padre deve andare avanti perchè a seguito dell’esecuzione di dcmd deve essere ritornato immediatamente il prompt.
Avatar utente
Wilson
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3539
Iscrizione: domenica 20 novembre 2005, 14:47
Desktop: Unity
Distribuzione: Edubuntu 15.04 x86_64
Località: Torino

Re: avviare un comando linux ad una certa data e ora

Messaggio da Wilson »

Ma stai cercando un programma per fare questo o stai cercando di programmare AT in C cambiandogli nome?

Nel secondo caso hai decisamente sbagliato sezione (e se non è un esercizio scolastico anche obiettivo: perché cercare di fare da zero una delle utilità più antiche e ottimizzate?)
-- Provate Ubuntu! Innocuo se usato secondo le istruzioni --
Avatar utente
DamianFox
Prode Principiante
Messaggi: 42
Iscrizione: lunedì 14 maggio 2012, 16:31
Desktop: unity
Distribuzione: Ubuntu 12.10

Re: avviare un comando linux ad una certa data e ora

Messaggio da DamianFox »

Scusa, inizialmente avevo creato questo post nella sezione programmazione, non so perchè sia finito qui. Comunque quello che sto facendo è un esercizio scolastico ed reimplementare un comando già esistente è richiesto dal testo (tuttavia non deve avere tutte le funzionalità di AT o CRONTAB, ma alcune di esse)..
Avatar utente
Wilson
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3539
Iscrizione: domenica 20 novembre 2005, 14:47
Desktop: Unity
Distribuzione: Edubuntu 15.04 x86_64
Località: Torino

Re: avviare un comando linux ad una certa data e ora

Messaggio da Wilson »

Beh, l'importante è chiarire: il messaggio originario era un po' ambiguo, infatti molti dei consigli rispondevano alla domanda sbagliata (e pure i moderatori si saranno confusi, comunque ho segnalato la discussione perché sia spostata in Programmazione).

Spero che fatta chiarezza tu possa trovare migliori indicazioni, magari per facilitare la cosa modifica il titolo del primo post aggiungendo il linguaggio di programmazione che devi usare.

ps: per il futuro è meglio se descrivi meglio la situazione già da subito: è più facile trovare l'aiuto giusto e lasci anche il forum più leggibile per chi avesse le stesse necessità in futuro :D
-- Provate Ubuntu! Innocuo se usato secondo le istruzioni --
Avatar utente
DamianFox
Prode Principiante
Messaggi: 42
Iscrizione: lunedì 14 maggio 2012, 16:31
Desktop: unity
Distribuzione: Ubuntu 12.10

Re: [C] avviare un comando linux ad una certa data e ora

Messaggio da DamianFox »

Sì è vero! Chiedo perdono! :shy:
Allora riformulo la domanda.

Nel corso di Sistemi Operativi 1 devo fare un progetto e come richiesta c'è da implementare in linguaggio C un comando chiamato dcmd. Questo comando ha la funzione di eseguire un altro comando di default di linux ad una data e ora prestabiliti. Quindi il il comando di default e la data devono essere scritti a terminale.
La data ovviamente deve essere giusta (es: i mesi non devono avere più di 31, bisogna tenere conto anche degli anni bisestili ecc..), ho fatto tutti i controlli del caso e qui non ci sono problemi; anche il comando ho capito come eseguirlo: è sufficiente usare la system call "exec" ed il gioco è fatto. Il problema è che non so come unire i due dati, cioè eseguire il comando di default nella data indicata.

Ho trovato un modo per eseguire il comando dopo un tot di secondi, usando la fork con l'exec, e nel processo figlio creato dalla fork eseguo una "sleep". Ma sono dubbioso su questo metodo: crea dei processi zombie? E' valido usare la sleep oppure ci sono modi più sofisticati?

Spero di essere stato chiaro, altrimenti chiedete.. :D
angleasruf
Prode Principiante
Messaggi: 7
Iscrizione: lunedì 16 aprile 2012, 17:20

Re: [C] avviare un comando linux ad una certa data e ora

Messaggio da angleasruf »

Funziona bene! Immagine
Avatar utente
DamianFox
Prode Principiante
Messaggi: 42
Iscrizione: lunedì 14 maggio 2012, 16:31
Desktop: unity
Distribuzione: Ubuntu 12.10

Re: [C] avviare un comando linux ad una certa data e ora

Messaggio da DamianFox »

Ho fatto qualche test al programma e funzione con ls, mkdir, rmdir; non funziona però con "sudo su" o "cd". Quale potrebbe essere il problema?
Avatar utente
Wilson
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3539
Iscrizione: domenica 20 novembre 2005, 14:47
Desktop: Unity
Distribuzione: Edubuntu 15.04 x86_64
Località: Torino

Re: [C] avviare un comando linux ad una certa data e ora

Messaggio da Wilson »

Se non sbaglio cd non è un programma, ma un comando interno della shell (e comunque serve a cambiare la cartella di esecuzione del processo, non dovrebbe poter avere effetti da solo).

Per sudo non so, ma credo dipenda dalla necessità di chiedere la passwd all'utente.
-- Provate Ubuntu! Innocuo se usato secondo le istruzioni --
Avatar utente
DamianFox
Prode Principiante
Messaggi: 42
Iscrizione: lunedì 14 maggio 2012, 16:31
Desktop: unity
Distribuzione: Ubuntu 12.10

Re: [C] avviare un comando linux ad una certa data e ora

Messaggio da DamianFox »

Quindi "ls" o "mkdir" o "rmdir" sono programmi?
Avatar utente
Wilson
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3539
Iscrizione: domenica 20 novembre 2005, 14:47
Desktop: Unity
Distribuzione: Edubuntu 15.04 x86_64
Località: Torino

Re: [C] avviare un comando linux ad una certa data e ora

Messaggio da Wilson »

Si, esatto, per verificare puoi usare which

Codice: Seleziona tutto

$ which ls
/bin/ls
-- Provate Ubuntu! Innocuo se usato secondo le istruzioni --
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: [C] avviare un comando linux ad una certa data e ora

Messaggio da crap0101 »

aggiungo, anche type ti può dare info utili

Codice: Seleziona tutto

 
crap0101@crap0101-M:~$ type -a ls cd mkdir type
ls ha "ls --color=auto" come alias
ls è /bin/ls
cd è un comando interno di shell
mkdir è /bin/mkdir
type è un comando interno di shell

http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
DamianFox
Prode Principiante
Messaggi: 42
Iscrizione: lunedì 14 maggio 2012, 16:31
Desktop: unity
Distribuzione: Ubuntu 12.10

Re: [C] avviare un comando linux ad una certa data e ora

Messaggio da DamianFox »

ok, grazie delle risposte

Per cd penso di aver trovato la soluzione (provo ad usare la funzione chdir), mentre per sudo devo ancora trovarla. Comunque devo chiedere al docente per capire se devo gestire questo caso o meno.
Avatar utente
DamianFox
Prode Principiante
Messaggi: 42
Iscrizione: lunedì 14 maggio 2012, 16:31
Desktop: unity
Distribuzione: Ubuntu 12.10

Re: [C] avviare un comando linux ad una certa data e ora

Messaggio da DamianFox »

Nella consegna dell'esercizio è richiesto che il risultato del comando sia scritto in un file. Ho scritto il codice, che dovrebbe essere giusto, però mi crea solo il file ma non mi scrive in esso. Ecco il mio codice:

Codice: Seleziona tutto

if (fork()  == 0) {
			
			if ((fd = open("dcmd_history.txt", O_WRONLY | O_CREAT)) == -1) 
			{
				perror("dcmd_history.txt"); 
				return 0; 
			}

			dup2(fd, 1);
    
			chmod("dcmd_history.txt",S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
			
			execv(argv[1],argv);
}
Perchè?

Grazie.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 12 ospiti