questi sono gli altri pezzi di codice....
Codice:
#include "vd.h"
extern int get_first_free_inode();
extern void write_inode(int, inode*);
extern void read_inode(int, inode*);
extern void write_file_block(int, char*);
extern void read_file_block(int, char*);
/*
*
*/
int get_inode_number(char *path) {
/* Verifico se path e' una directory (ultimo carattere == '/') */
int l = strlen(path);
if(*(path+l-1)=='/') {
}
/* E' stato passato un nome di file */
else {
}
/* Percorso non valido */
return -1;
}
/*
*
*/
void create_dir(char *name) {
inode i;
i.id = get_first_free_inode();
i.type = TYPE_DIR;
memcpy(&i.name[0], name, MAX_NAME_LENGTH);
i.size = 0;
write_inode(i.id, &i);
}
/*
*
*/
void cp_to_vd(char *src, char *dst) {
int src_fd = open(src,O_RDONLY);
int src_size = lseek(src_fd,0,SEEK_END);
lseek(src_fd,0,SEEK_SET);
char file_data[BLOCK_SIZE];
read(src_fd, &file_data[0], src_size);
inode i;
i.id = get_first_free_inode();
i.type = TYPE_FILE;
memcpy(&i.name[0], dst, MAX_NAME_LENGTH);
i.size = src_size;
write_inode(i.id, &i);
write_file_block(i.id, &file_data[0]);
}
/*
*
*/
void cp_from_vd(char *src, char *dst) {
int dst_fd = open(dst, O_WRONLY|O_TRUNC|O_CREAT);
inode i;
char data[BLOCK_SIZE];
read_inode(1, &i);
read_file_block(1,&data[0]);
write(dst_fd, &data[0], i.size);
close(dst_fd);
}
/*
*
*/
void list_inodes() {
int i;
inode in;
printf("Lista degli inode:\n");
for(i=0; i<MAX_INODES; i++) {
read_inode(i, &in);
switch(in.type) {
case TYPE_DIR: printf("(%d) '%s', directory con %d file\n",in.id,&(in.name[0]),in.size);
break;
case TYPE_FILE: printf("(%d) '%s' file di %d bytes\n",in.id, &(in.name[0]), in.size);
break;
case TYPE_EMPTY: printf("(%d) libero\n", in.id);
break;
default: printf("(%d) tipo '%c' ???\n", in.id, in.type);
break;
}
}
}
Codice:
#include "vd.h"
int main() {
int done=0;
/* Inizializzo il disco */
if (vdserver_init(&done)<0)
return -1;
/* Mando in background il processo */
int pid = fork();
/* Processo figlio */
if(pid==0) {
int pipe_fd;
char cmd[MAX_CMD_LENGTH];
int ncar;
/* Loop principale */
while(!done) {
pipe_fd=open("pipe",O_RDONLY);
/* Leggo comando dalla pipe */
ncar=read(pipe_fd,&cmd[0],MAX_CMD_LENGTH);
cmd[ncar]='\0';
/* Eseguo il comando */
vdserver_exec_cmd(cmd);
/* Ripulisco l'array altrimenti contiene spazzatura ???????? */
int i;
for(i=0;i<MAX_CMD_LENGTH;i++)
cmd[i]='\0';
/* Chiudo la pipe */
close(pipe_fd);
}
/* Figlio terminato */
return 0;
}
/* Fine processo padre */
printf("vdserver in esecuzione con PID %d\n",pid);
return 0;
}
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <assert.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
/* Tipi di inode */
#define TYPE_DIR 'd'
#define TYPE_FILE 'f'
#define TYPE_LINK 'l'
#define TYPE_EMPTY 'e'
#define TYPE_PURGED 'p'
/* Numero di inode gestiti */
#define MAX_INODES 3
/* Dimensione blocchi dati in byte */
#define BLOCK_SIZE 32
/* Lunghezza massima di un nome file/directory */
#define MAX_NAME_LENGTH 11
/* Nome del file che ospita il disco virtuale */
#define DISK_FILENAME "disk"
/* Lunghezza massima di un comando inviato alla pipe */
#define MAX_CMD_LENGTH 1000
/*
* Struttura di un inode
*/
typedef struct {
int id;
char type;
char name[MAX_NAME_LENGTH+1];
int size;
} inode;
/*
*
*/
int vdserver_init(int *p);
void vdserver_exec_cmd(char cmd[MAX_CMD_LENGTH]);
e questo è il gestore che lo fa partire:
Codice:
#!/bin/bash
#qui potrei mettere tipo PATH= tutti i file bash che trattano i commandi....
SERVER_COMMAND="vd.c"
DIRSERVER="$HOME/Deskop/sob" #directory dove si trova il server
SERVER_ID_FILE="/tmp/.server.tmp" #directory temporanea
if [ $# != 1 ] ; then
echo "Gestore: Usage vd: {start|stop}"
exit 1
fi
case "$1" in
start)
$DIRSERVER/$SERVER_COMMAND & #esegue il server
echo "$!" > $SERVER_ID_FILE;;
stop)
PID=$(cat $SERVER_ID_FILE) #salva il pid
kill -SIGUSR1 $PID #killa il pid
rm $SERVER_ID_FILE;;
*)
echo "Gestore: Usage vd: {start|stop}"
exit 1;;
esac
exit 0;
quanto faccio ./vd start
mi da una serie di errori sul primo codice che ho postato...
in particolare mi dice:
line 7: /bin is a directory
line 8 int: command not found
line 10 /bin is a directory
line 11 int: command not found
line 13 bin is a directoy
line 14 int: command not found
line 17 bin is a directoy
line 18 disk: command not found
line 19 */ no such file o directory
line 20 sintax error near unespected token (
line 20 int get first free inode() {
perchè non funziona?cosa ce di sbagliato?
grazie infinite a chi mi sa aiutare...