Risolto creazione sistema di cartelle in base al giorno su ubuntu in C

kiddyspace

Utente Bronze
14 Aprile 2021
50
12
7
32
Salve , devo fare un progetto per l'esame di sistemi operativi e devo usare le chiamate di sistema . (il progetto in generale si basa su un registratore di cassa e una comanda) Vorrei fare in modo che ad ogni pagamento venga creata automaticamente una cartella in base al giorno e poi due cartelle , una per la comanda e una per lo scontrino( le cartelle però devono essere salvate sul pc). Potete indicarmi degli esempi con cui posso riuscire a capire come fare o magari sapreste indicarmi se ci sono delle chiamate di sistema che posso usare per creare delle cartelle? magari anche se esiste qualche libreria che mi permette di specificare il giorno e l'ora in cui mi trovo. Grazie
 
Ultima modifica:
Le chiamate di sistema che ti servono sono: mkdir, stat, time.

C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/stat.h>

// Crea la cartella se non esiste già, ritorna 0 se non è possibile crearla
int create_dir(const char* dirName)
{
    struct stat st;
    int ret = 1;
    if (stat(dirName,&st) != 0)
        ret = (mkdir(dirName, S_IRWXU) == 0);

    return ret;
}

// Ritorna il nome della cartella di oggi e prova a crearla
int get_today_dir(char* dirName)
{
    time_t now;
    struct tm *info;
    time(&now);
    info = localtime(&now);
    sprintf(dirName, "%d-%02d-%02d", (info->tm_year + 1900), (info->tm_mon + 1), info->tm_mday);
    return create_dir(dirName);
}

int get_today_subdir(const char* subDirName, char* fullDirName)
{
    if (!get_today_dir(fullDirName))
        return 0;
 
    strcat(fullDirName, subDirName);
    return create_dir(fullDirName);
}

int get_today_invoice_dir(char* dirName)
{
    return get_today_subdir("/scontrini", dirName);
}

int get_today_orders_dir(char* dirName)
{
    return get_today_subdir("/comande", dirName);
}

int main()
{
    char dir[120];
    if (!get_today_dir(dir))
    {
        printf("Impossibile creare la cartella, potresti non avere i permessi necessari");
        return 1;
    }
    // in dir si trova il percorso alla cartella di oggi e.g. 2022-07-03
    get_today_invoice_dir(dir);
    // adesso in dir si trova il percorso alla cartella degli scontrini di oggi e.g. 2022-07-03/scontrini
    get_today_orders_dir(dir);
    // adesso in dir si trova il percorso alla cartella delle comande di oggi
    return 0;
}

PS: l'albero di cartelle viene creato nella directory corrente, ovvero da dove viene lanciato il tuo programma. Se vuoi mettere un percorso assoluto inseriscilo nella sprintf, nella format string prima dei %d oppure per renderlo dinamico passalo da parametro ed inserisci nella format %s/%d-%02d-%02d.
 
  • Love
Reazioni: kiddyspace
grazie proprio adesso , prima di vedere questo messaggio ho trovato la chiamata mkdir e sono riuscito a inserire una comanda nella cartella delle comande , adesso devo capire come inserire una cartella in una cartella e poi mi metto a giocare un po' con la gestione del giorno , grazie per il tempo
 
Con bash verrebbe più semplice, puoi fare un comando tipo :
Bash:
mkdir NameDirectory$(date +%Y_%m_%d)

questo è il risultato :

1657057725753.png


metti tutto dntro ad uno script bash e lo carichi sul crontab indicando di lanciarlo ogni giorno.
 
Con bash verrebbe più semplice, puoi fare un comando tipo :
Bash:
mkdir NameDirectory$(date +%Y_%m_%d)

questo è il risultato :

Visualizza allegato 63833

metti tutto dntro ad uno script bash e lo carichi sul crontab indicando di lanciarlo ogni giorno.
Grazie per la risposta , devo usare C perché è un progettino per un esame e comunque grazie a @JunkCoder sono riuscito a creare un sistema di directory in base al giorno