View Single Post
Old 03-07-2006, 18:40   #6
IspiCiosa
Senior Member
 
Iscritto dal: Dec 2004
Messaggi: 1218
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...
__________________
Athlon64 3500 (Winchester), Asus A8V-E Deluxe, X700Pro 256MB, Maxtor 200GB Sata,Ali Enermax 400W, Mast. Pionner 109,Lettore dvd LG, Creative 2.1 3200, LG 1980q, Canon Pixma mp500.
IspiCiosa è offline   Rispondi citando il messaggio o parte di esso