示例#1
0
static int syscall_open(char *filename){
	if(filename == NULL || strlen(filename) == 0)
		return -1;

	struct thread *cur = thread_current ();
	struct file_elem *fe, *fe_prev;
	struct list_elem *le;
	int fd;

	fe = filesys_open_file(filename);

	if(fe == NULL)
		return -1;

	if(fe->file == NULL && fe->dir == NULL) {
		/* Error occured while opening file */
		return -1;
	}

	// If some files are opened already, fd will be fd of last opened file + 1.
	if(!list_empty(&cur->open_files)) {
		le = list_back(&cur->open_files);
		fe_prev = list_entry(le, struct file_elem, elem);
		fd = fe_prev->fd + 1;
	}
示例#2
0
void music_sheet_test_play_midi_file()
{
        struct fs_posix fs;
        fs_posix_init(&fs, "data");
        struct file* file = filesys_open_file(&fs.__parent, "./piano_sonata_13_1_(c)oguri.mid", false);

        struct music_sheet sheet;
        music_sheet_init(&sheet);
        music_sheet_load_from_midi_file(&sheet, file);

        filesys_free(&fs.__parent);

        struct music_sheet_iter iter;
        music_sheet_get_iter_by_note_id(&sheet, 0, &iter);

        struct syn_audioif syn;
        syn_aif_init(&syn);

        while (music_sheet_play_next(&sheet, &iter, &syn.__parent))
                continue;

        music_sheet_free(&sheet);
        syn_aif_free(&syn);
}