riscv-pke/spike_interface/spike_file.h

65 lines
1.5 KiB
C

#ifndef _SPIKE_FILE_H_
#define _SPIKE_FILE_H_
#include <unistd.h>
#include <sys/stat.h>
#include "util/types.h"
typedef struct file {
int kfd; // file descriptor of the host file
uint32 refcnt;
} spike_file_t;
extern spike_file_t spike_files[];
#define O_RDONLY 00
#define O_WRONLY 01
#define O_RDWR 02
#define ENOMEM 12 /* Out of memory */
#define stdin (spike_files + 0)
#define stdout (spike_files + 1)
#define stderr (spike_files + 2)
#define INIT_FILE_REF 3
struct frontend_stat {
uint64 dev;
uint64 ino;
uint32 mode;
uint32 nlink;
uint32 uid;
uint32 gid;
uint64 rdev;
uint64 __pad1;
uint64 size;
uint32 blksize;
uint32 __pad2;
uint64 blocks;
uint64 atime;
uint64 __pad3;
uint64 mtime;
uint64 __pad4;
uint64 ctime;
uint64 __pad5;
uint32 __unused4;
uint32 __unused5;
};
void copy_stat(struct stat* dest, struct frontend_stat* src);
spike_file_t* spike_file_open(const char* fn, int flags, int mode);
int spike_file_close(spike_file_t* f);
spike_file_t* spike_file_openat(int dirfd, const char* fn, int flags, int mode);
ssize_t spike_file_lseek(spike_file_t* f, size_t ptr, int dir);
ssize_t spike_file_read(spike_file_t* f, void* buf, size_t size);
ssize_t spike_file_pread(spike_file_t* f, void* buf, size_t n, off_t off);
ssize_t spike_file_write(spike_file_t* f, const void* buf, size_t n);
void spike_file_decref(spike_file_t* f);
void spike_file_init(void);
int spike_file_dup(spike_file_t* f);
int spike_file_truncate(spike_file_t* f, off_t len);
int spike_file_stat(spike_file_t* f, struct stat* s);
#endif