61 lines
2.1 KiB
C
61 lines
2.1 KiB
C
#pragma once
|
|
#ifndef _API_FILE
|
|
#define _API_FILE
|
|
|
|
#include <fileQueue.h>
|
|
#include <taglialegna.h>
|
|
/* TODO: finire tutte le descrizioni */
|
|
|
|
// Lista dei client in attesa su una lock
|
|
typedef struct struct_waiting {
|
|
long fd; // client in attesa
|
|
char *file; // file su cui si vuole acquisire la lock
|
|
struct struct_waiting *next; // puntatore al prossimo elemento della lista
|
|
} waiting_t;
|
|
|
|
/**
|
|
* Apri o crea un nuovo file
|
|
* \param filepath: nome del file
|
|
* \param flags:
|
|
* \param q: queue in cui inserire il file
|
|
* \param fd_c:
|
|
* \param taglia_t:
|
|
*/
|
|
void openFile(char *filepath, int flags, queueT *q, long fd_c, taglia_t *taglia);
|
|
|
|
// Leggi un file e invialo al client
|
|
void readFile(char *filepath, queueT *q, long fd_c, taglia_t *taglia);
|
|
|
|
// Invia al client $n file qualsiasi dalla queue
|
|
void readNFiles(char *numStr, queueT *q, long fd_c, taglia_t *taglia);
|
|
|
|
// Scrivi dati su un file già creato (append o overwrite)
|
|
void writeFile(char *filepath, size_t size, queueT *q, long fd_c, taglia_t *taglia, int append);
|
|
|
|
// Acquisisci lock di un file
|
|
void lockFile(char *filepath, queueT *q, long fd_c, taglia_t *taglia, pthread_mutex_t *lock, waiting_t **waiting);
|
|
|
|
// Rilascia una Lock di un file
|
|
void unlockFile(char *filepath, queueT *q, long fd_c, taglia_t *taglia, pthread_mutex_t *lock, waiting_t **waiting);
|
|
|
|
// Chiudi un file
|
|
void closeFile(char *filepath, queueT *q, long fd_c, taglia_t *taglia, pthread_mutex_t *lock, waiting_t **waiting);
|
|
|
|
// Rimuovi un file
|
|
void removeFile(char *filepath, queueT *q, long fd_c, taglia_t *taglia, pthread_mutex_t *lock, waiting_t **waiting);
|
|
|
|
|
|
// Funzione ausiliaria che invia un file al client
|
|
int sendFile(fileT *f, long fd_c, taglia_t *taglia);
|
|
|
|
// Aggiunge una coppia client/file alla coda in attesa di ottenere una lock
|
|
int addWaiting(waiting_t **waiting, char *file, int fd);
|
|
|
|
// Ottiene il primo client in attesa su una lock di un determinato file
|
|
int removeFirstWaiting(waiting_t **waiting, char *file);
|
|
|
|
// Distrugge la lista d'attesa e ne libera la memoria
|
|
void clearWaiting(waiting_t **waiting);
|
|
|
|
#endif // _API_FILE
|