Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [C] processi in Unix e syscall su File System

    Perdonate il titolo poco chiaro.
    Devo afre un progettino per l'uni.. un programma che legga un file di input in cui sono forniti il numero massimo di processi da usare, una data, e una serie di directory.
    Il programma deve esplorare ricorsivamente il contenuto delle directory controllando la data e l'ora dell'ultima modifica a ciascun file e riportare in un file di output il path completo di tutti i files piu' vecchi della data & ora indicata nel file di input.

    Il difficile non è tanto controllare il file (anche se va fatto con le syscall e non con le funzioni di libreria) ma gestire la storia dei processi... questo è il testo relativo:

    "La visita dell'albero delle directory deve essere effettuata in parallelo da un massimo di N processi distinti (N anch'esso contenuto nel file di input). Ovviamente il numero di processi impiegato protrà essere minore di N se il numero di directory (detto D) da esplorare sia esso stesso minore di N. Nel caso in cui, invece, il numero directory D sia maggiore di N, uno dei processi esplorerà le rimanenti. Ad esempio, con 10 directory e 3 processi, il primo ed il secondo processo esploreranno tre directory, il terzo quattro.

    Si puo' assumere che le directory non siano parzialmente sovrapposte, ovvero che non sia possibile visitare due volte lo stesso sottoalbero. "

    Non ho davvero idea.. mi illuminate un attimino


  2. #2

  3. #3
    dai un occhiata alla documentazione che trovi
    qui per i processi
    http://www.pluto.it/devel/docs.html e
    http://ildp.pluto.it/

    poi avevo una lista delle syscall ma l'ho persa..


  4. #4
    sì ma + che altro ora il problema è algoritmico

  5. #5
    io farei un controllo sul numero di dir (d)
    e poi avendo d/N ho le directory per ciascun processo..
    se d/N*N != d allora aggiungo le dir rimanenti..
    ovvero il resto di d/N :-p

    for (i=0;i<N-1;i++)fork();
    //controllo
    fork()//last process..

  6. #6
    Originariamente inviato da kentaromiura
    io farei un controllo sul numero di dir (d)
    e poi avendo d/N ho le directory per ciascun processo..
    se d/N*N != d allora aggiungo le dir rimanenti..

    for (i=0;i<N-1;i++)fork();
    //controllo
    fork()//last process..
    hum.. vabbè.. ci sbatto un po' a livello pratico e ti faccio sapere poi

    mi manca un pèo' la pratica.. mi faccio prendere dal panico.. non programmo mai in C se non per l'uni

  7. #7
    mmm

    puoi far si che il soft parta è apra una socket unix... e avvii un fork al quale passa una directory da processare...il fork come prima cosa elenca il tutto...e invia al server una serie di stringhe con l'elenco dei file...fatto questo inizia a processare le directory...come? esegue un ciclo sulle directory nel quale chiede al server principale quanti processi può ancora aprire...fatto questo se ne può aprire almeno uno lancia un fork impostando il nome della directory, se non ne può lanciare nemmeno uno attende un decimo di secondo e riprova (basta un semplicissimo while) e cosi via avanti

    fatta la struttura base tutto va da solo ^^

    il server quando ha completato di esplorare TUTTE le directory e vede che tutti i processi figli sono morti (quindi tutte le socket cliente sono COMPLETAMENTE chiuse, ovvero nessun fork sta elaborando più sotto directory) chiude il server, prepara i dati che ha ricevuto (ovvero l'array) e scrive su file

    se poi la vuoi fare pulita puoi utilizzare XML per gestire l'albero delle cartelle

    in questo modo è tutto totalmente asincrono e veloce
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  8. #8
    grazie anche a te daniele.. allora.. questo è un progettino ino ino che serve come riscaldamento (è facoltativo) per un progetto più completo... nel progett completo dovrenmo usare qualche meccanismo di IPC (interprocessing communication) ma in questo il prof ha detto che non sarebbe necessario ma se vogliamo farlo si può e dobbiamo argomentare nella documentazione [non so se è un tranello ] .. mi pare eccessivo l'uso di un socket.. anche se fors eserve un meccanismo di sincronizzazione.. insomma come dicevo.. quando comincio a scivere qualcosa riuppo e chiedo con maggior cognizione di causa

    per xml... daniè.. è un progettino per l'uni eh

  9. #9
    Originariamente inviato da }gu|do[z]{®©
    grazie anche a te daniele.. allora.. questo è un progettino ino ino che serve come riscaldamento (è facoltativo) per un progetto più completo... nel progett completo dovrenmo usare qualche meccanismo di IPC (interprocessing communication) ma in questo il prof ha detto che non sarebbe necessario ma se vogliamo farlo si può e dobbiamo argomentare nella documentazione [non so se è un tranello ] .. mi pare eccessivo l'uso di un socket.. anche se fors eserve un meccanismo di sincronizzazione.. insomma come dicevo.. quando comincio a scivere qualcosa riuppo e chiedo con maggior cognizione di causa

    per xml... daniè.. è un progettino per l'uni eh
    era per facilitarti la gestione dei risultati, xche senno devi avere una MEGA linked list (o un mega array che va + che bene in questo caso)

    mentre con XML ti cicli il tutto senza grossi problemi anche se ti devi fare una funzione ricorsiva
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    Originariamente inviato da daniele_dll
    era per facilitarti la gestione dei risultati, xche senno devi avere una MEGA linked list (o un mega array che va + che bene in questo caso)

    mentre con XML ti cicli il tutto senza grossi problemi anche se ti devi fare una funzione ricorsiva
    un bel b-albero senno?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.