Files
progettoso/lib/threadpool/apiFile.h

68 lines
2.1 KiB
C
Raw Normal View History

2022-03-16 23:45:39 +01:00
#pragma once
#ifndef _API_FILE
#define _API_FILE
#include <pthread.h>
2022-03-16 23:45:39 +01:00
#include <fileQueue.h>
2022-04-04 22:31:14 +02:00
#include <taglialegna.h>
2022-03-16 23:45:39 +01:00
/* TODO: finire tutte le descrizioni */
2022-04-27 21:18:25 +02:00
#define C_CREATE 1
#define C_LOCK 2
2022-03-18 20:49:28 +01:00
// 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
2022-03-22 19:35:06 +01:00
} waiting_t;
2022-03-18 20:49:28 +01:00
2022-04-27 21:18:25 +02:00
2022-03-16 23:45:39 +01:00
/**
* Apri o crea un nuovo file
* \param filepath: nome del file
2022-03-31 22:26:44 +02:00
* \param flags:
2022-03-16 23:45:39 +01:00
* \param q: queue in cui inserire il file
2022-04-09 22:43:26 +02:00
* \param fd_c: owner
2022-03-31 22:26:44 +02:00
* \param taglia_t:
2022-03-16 23:45:39 +01:00
*/
2022-03-31 22:26:44 +02:00
void openFile(char *filepath, int flags, queueT *q, long fd_c, taglia_t *taglia);
2022-03-16 23:45:39 +01:00
// Leggi un file e invialo al client
2022-03-31 22:26:44 +02:00
void readFile(char *filepath, queueT *q, long fd_c, taglia_t *taglia);
2022-03-16 23:45:39 +01:00
// Invia al client $n file qualsiasi dalla queue
2022-04-09 22:43:26 +02:00
void readNFiles(int num, queueT *q, long fd_c, taglia_t *taglia);
2022-03-16 23:45:39 +01:00
// Scrivi dati su un file già creato (append o overwrite)
2022-03-31 22:26:44 +02:00
void writeFile(char *filepath, size_t size, queueT *q, long fd_c, taglia_t *taglia, int append);
2022-03-16 23:45:39 +01:00
// Acquisisci lock di un file
2022-04-04 22:31:14 +02:00
void lockFile(char *filepath, queueT *q, long fd_c, taglia_t *taglia, pthread_mutex_t *lock, waiting_t **waiting);
2022-03-16 23:45:39 +01:00
// Rilascia una Lock di un file
2022-03-31 22:26:44 +02:00
void unlockFile(char *filepath, queueT *q, long fd_c, taglia_t *taglia, pthread_mutex_t *lock, waiting_t **waiting);
2022-03-16 23:45:39 +01:00
// Chiudi un file
2022-03-31 22:26:44 +02:00
void closeFile(char *filepath, queueT *q, long fd_c, taglia_t *taglia, pthread_mutex_t *lock, waiting_t **waiting);
2022-03-16 23:45:39 +01:00
// Rimuovi un file
2022-03-31 22:26:44 +02:00
void removeFile(char *filepath, queueT *q, long fd_c, taglia_t *taglia, pthread_mutex_t *lock, waiting_t **waiting);
2022-03-16 23:45:39 +01:00
// Funzione ausiliaria che invia un file al client
2022-03-31 22:26:44 +02:00
int sendFile(fileT *f, long fd_c, taglia_t *taglia);
2022-03-16 23:45:39 +01:00
// Aggiunge una coppia client/file alla coda in attesa di ottenere una lock
2022-04-10 20:51:43 +02:00
int addWaiting(waiting_t **waiting, char *filepath, int fd_c);
2022-03-16 23:45:39 +01:00
// Ottiene il primo client in attesa su una lock di un determinato file
2022-04-10 20:51:43 +02:00
int removeFirstWaiting(waiting_t **waiting, char *filepath);
2022-03-16 23:45:39 +01:00
// Distrugge la lista d'attesa e ne libera la memoria
2022-03-22 19:35:06 +01:00
void clearWaiting(waiting_t **waiting);
2022-03-16 23:45:39 +01:00
#endif // _API_FILE