first stdin, stout, stderr implementation (still buggy)
This commit is contained in:
parent
e765e16eb1
commit
02f7fecc61
7 changed files with 40 additions and 26 deletions
|
@ -28,7 +28,9 @@
|
|||
|
||||
static ssize_t stdin_read(vfs_node_t* node, uint8_t* buffer, size_t size, off_t offset)
|
||||
{
|
||||
kprintf("Keine Eingabe implementiert");
|
||||
while(size) {
|
||||
size = kputs((char*)buffer);
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ static ssize_t stdout_read(vfs_node_t* node, uint8_t* buffer, size_t size, off_t
|
|||
|
||||
static ssize_t stdout_write(vfs_node_t* node, uint8_t* buffer, size_t size, off_t offset)
|
||||
{
|
||||
kprintf("%s", buffer);
|
||||
size = kprintf("%s\0", buffer);
|
||||
return size;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ static int sys_read(int fd, const char *buf, size_t len)
|
|||
(uint8_t*)buf, len,
|
||||
per_core(current_task)->fildes_table[fd].offset);
|
||||
per_core(current_task)->fildes_table[fd].offset += readbytes;
|
||||
/*kprintf("fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf);*/
|
||||
//kprintf("fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf);
|
||||
/* Beware: still reading above file limit! */
|
||||
return readbytes;
|
||||
}
|
||||
|
@ -40,12 +40,8 @@ static int sys_read(int fd, const char *buf, size_t len)
|
|||
static int sys_write(int fd, const char *buf, size_t len)
|
||||
{
|
||||
unsigned int wrotebytes;
|
||||
/* per_core(current_task)->fildes_table[fd].node->write = 1; */
|
||||
wrotebytes = write_fs(
|
||||
per_core(current_task)->fildes_table[fd].node,
|
||||
(uint8_t*)buf, len, 0);
|
||||
/* per_core(current_task)->fildes_table[fd].offset); */
|
||||
/* kprintf("ins Dateis. geschr. -- fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf); */
|
||||
wrotebytes = write_fs(per_core(current_task)->fildes_table[fd].node, (uint8_t*)buf, len, per_core(current_task)->fildes_table[fd].offset);
|
||||
//kprintf("ins Dateis. geschr. -- fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, wrotebytes, buf);
|
||||
per_core(current_task)->fildes_table[fd].offset += wrotebytes;
|
||||
|
||||
return wrotebytes;
|
||||
|
@ -54,7 +50,7 @@ static int sys_write(int fd, const char *buf, size_t len)
|
|||
static int sys_open(const char* file, int flags, int mode)
|
||||
{
|
||||
int fd;
|
||||
for (fd = 0; fd < MAX_FILDES; fd++) {
|
||||
for (fd = 3; fd < MAX_FILDES; fd++) {
|
||||
if (per_core(current_task)->fildes_table[fd].node == NULL) {
|
||||
per_core(current_task)->fildes_table[fd].node = findnode_fs((char*) file);
|
||||
return fd;
|
||||
|
@ -118,28 +114,26 @@ int syscall_handler(uint32_t sys_nr, ...)
|
|||
int fd = va_arg(vl, int);
|
||||
const char* buf = va_arg(vl, const char*);
|
||||
size_t len = va_arg(vl, size_t);
|
||||
kprintf("%s", buf);
|
||||
//ret = sys_read(fd, buf, len);
|
||||
ret = sys_read(fd, buf, len);
|
||||
break;
|
||||
}
|
||||
case __NR_write: {
|
||||
int fd = va_arg(vl, int);
|
||||
const char* buf = va_arg(vl, const char*);
|
||||
size_t len = va_arg(vl, size_t);
|
||||
kprintf("%s", buf);
|
||||
//ret = sys_write(fd, buf, len);
|
||||
ret = sys_write(fd, buf, len);
|
||||
break;
|
||||
}
|
||||
case __NR_open: {
|
||||
const char* file = va_arg(vl, const char*);
|
||||
int flags = va_arg(vl, int);
|
||||
int mode = va_arg(vl, int);
|
||||
//ret = sys_open(file, flags, mode);
|
||||
ret = sys_open(file, flags, mode);
|
||||
break;
|
||||
}
|
||||
case __NR_close: {
|
||||
int fd = va_arg(vl, int);
|
||||
//ret = sys_close(fd);
|
||||
ret = sys_close(fd);
|
||||
break;
|
||||
}
|
||||
case __NR_sbrk: {
|
||||
|
|
|
@ -184,6 +184,10 @@ static int create_task(tid_t* id, entry_point_t ep, void* arg)
|
|||
mailbox_wait_msg_init(&task_table[i].inbox);
|
||||
memset(task_table[i].outbox, 0x00, sizeof(mailbox_wait_msg_t*)*MAX_TASKS);
|
||||
task_table[i].outbox[per_core(current_task)->id] = &per_core(current_task)->inbox;
|
||||
task_table[i].fildes_table[0].node = findnode_fs("/dev/stdin");
|
||||
task_table[i].fildes_table[1].node = findnode_fs("/dev/stdout");
|
||||
task_table[i].fildes_table[2].node = findnode_fs("/dev/stderr");
|
||||
|
||||
|
||||
if (id)
|
||||
*id = i;
|
||||
|
@ -533,7 +537,7 @@ int create_user_task(tid_t* id, const char* fname, char** argv)
|
|||
}
|
||||
}
|
||||
|
||||
if (argc < 0)
|
||||
if (argc <= 0)
|
||||
return -EINVAL;
|
||||
if (buffer_size >= MAX_ARGS)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -102,7 +102,7 @@ static int STDCALL join_test(void* arg)
|
|||
|
||||
int test_init(void)
|
||||
{
|
||||
char* argv[] = {"/bin/tests", NULL};
|
||||
char* argv[] = {"/bin/hello", NULL};
|
||||
|
||||
sem_init(&producing, 1);
|
||||
sem_init(&consuming, 0);
|
||||
|
|
|
@ -28,14 +28,27 @@ extern int errno;
|
|||
int main(int argc, char** argv)
|
||||
{
|
||||
//int i;
|
||||
//char* str = (char *)malloc(40 * sizeof(char));
|
||||
//FILE* testfile;
|
||||
printf("hallo");
|
||||
//testfile = fopen("/bin/test", "w+r");
|
||||
//setbuf(testfile, NULL);
|
||||
//fread(str, 1, 10, testfile);
|
||||
//fwrite("wtest1\n", 1, 7, testfile);
|
||||
//fread(str, 1, 10, testfile);
|
||||
char* str = (char *)malloc(20 * sizeof(char));
|
||||
char* str2 = (char *)malloc(20 * sizeof(char));
|
||||
|
||||
FILE* testfile;
|
||||
testfile = fopen("/bin/test", "w+r");
|
||||
setbuf(testfile, NULL);
|
||||
fflush(NULL);
|
||||
fread(str2, 1, 10, testfile);
|
||||
fflush(NULL);
|
||||
printf("Datei gelesen (/bin/test):%s\n", str2);
|
||||
fflush(NULL);
|
||||
|
||||
setbuf(testfile, NULL);
|
||||
fflush(NULL);
|
||||
fwrite("wtest1", 1, 7, testfile);
|
||||
setbuf(testfile, NULL);
|
||||
|
||||
fread(str, 1, 10, testfile);
|
||||
fflush(NULL);
|
||||
|
||||
//printf("Aus Datei gelesen (/bin/test):%s\n", str);
|
||||
|
||||
return errno;
|
||||
}
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
HalloXA!!
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue