Manual da RTS: Difference between revisions
From Wiki**3
No edit summary |
|||
| Line 23: | Line 23: | ||
* '''const char *itoa(int i)''' -- Converte um valor inteiro para uma cadeia de caracteres ASCII, terminada em NULL ('''\0'''), situada num bloco de memória fixo (é reutilizado em chamadas subsequentes), em decimal. | * '''const char *itoa(int i)''' -- Converte um valor inteiro para uma cadeia de caracteres ASCII, terminada em NULL ('''\0'''), situada num bloco de memória fixo (é reutilizado em chamadas subsequentes), em decimal. | ||
* '''const char *dtoa(double d, int ndig, char *s)''' -- Converte um valor real em precisão dupla para uma cadeia de caracteres ASCII '''s''' com '''ndig''' dígitos significativos, terminada em NULL ('''\0'''), num formato equivalente ao '''%g''' da linguagem C. O resultado é guardado na cadeia '''s''' que deverá ter dimensão suficiente ou, caso seja um ponteiro nulo, num bloco de memória fixo reutilizado em chamadas subsequentes. | * '''const char *dtoa(double d, int ndig, char *s)''' -- Converte um valor real em precisão dupla para uma cadeia de caracteres ASCII '''s''' com '''ndig''' dígitos significativos, terminada em NULL ('''\0'''), num formato equivalente ao '''%g''' da linguagem C. O resultado é guardado na cadeia '''s''' que deverá ter dimensão suficiente ou, caso seja um ponteiro nulo, num bloco de memória fixo reutilizado em chamadas subsequentes. | ||
== Gestão de Memória == | |||
{{CollapsedCode|memory.h|<source lang="c"> | |||
/** | |||
* Initializes the memory management system | |||
* Must be called before any other memory functions | |||
* @returns 0 on success, -1 on failure | |||
*/ | |||
int mem_init(void); | |||
/** | |||
* Allocates memory of the specified size | |||
* @param size number of bytes to allocate | |||
* @returns pointer to allocated memory, 0 on failure | |||
*/ | |||
void* mem_alloc(unsigned long size); | |||
/** | |||
* Frees previously allocated memory | |||
* @param ptr pointer to memory to be freed | |||
*/ | |||
void mem_free(void *ptr); | |||
/** | |||
* Changes the size of the memory block pointed to by ptr | |||
* @param ptr pointer to the memory block to resize | |||
* @param size new size in bytes | |||
* @returns pointer to the resized memory block, 0 on failure | |||
*/ | |||
void* mem_realloc(void *ptr, unsigned long size); | |||
/** | |||
* Reports memory usage statistics | |||
* Prints information about the heap to stdout | |||
*/ | |||
void mem_stats(void); | |||
</source> | |||
}} | |||
== System Calls == | == System Calls == | ||
Revision as of 23:17, 9 June 2025
Funções
Os ficheiros da RTS contêm, além das rotinas de início (_start) e fim (_exit), um conjunto de funções semelhantes às da biblioteca de C:
Writing to stdout
- void println() -- Imprime o caráter de mudança de linha (\n).
- void printsp(int n) -- Imprime n espaços brancos.
- void prints(const char *s) -- Imprime a cadeia de caracteres s, terminada em NULL (\0).
- void printi(int i) -- Imprime o valor inteiro i, em decimal.
- void printd(double d) -- Imprime o valor real em precisão dupla num formato equivalente ao %g da função printf da linguagem C.
Reading from stdin
- char *readln(char *buf, int size) -- Equivale a fgets(buf, size, stdin) em C.
- char readb() -- Lê um byte do terminal.
- int readi() -- Lê um inteiro decimal, isolado numa linha, do terminal.
- double readd() -- Lê um valor real em precisão dupla, isolado numa linha, do terminal.
Other
- int strlen(const char *s) -- the same as in C.
- int atoi(const char *s) -- the same as in C.
- double atod(const char *s) -- Converte uma cadeia de caracteres ASCII, terminada em NULL (\0) no valor real em precisão dupla que representa.
- const char *itoa(int i) -- Converte um valor inteiro para uma cadeia de caracteres ASCII, terminada em NULL (\0), situada num bloco de memória fixo (é reutilizado em chamadas subsequentes), em decimal.
- const char *dtoa(double d, int ndig, char *s) -- Converte um valor real em precisão dupla para uma cadeia de caracteres ASCII s com ndig dígitos significativos, terminada em NULL (\0), num formato equivalente ao %g da linguagem C. O resultado é guardado na cadeia s que deverá ter dimensão suficiente ou, caso seja um ponteiro nulo, num bloco de memória fixo reutilizado em chamadas subsequentes.
Gestão de Memória
| memory.h |
|---|
/**
* Initializes the memory management system
* Must be called before any other memory functions
* @returns 0 on success, -1 on failure
*/
int mem_init(void);
/**
* Allocates memory of the specified size
* @param size number of bytes to allocate
* @returns pointer to allocated memory, 0 on failure
*/
void* mem_alloc(unsigned long size);
/**
* Frees previously allocated memory
* @param ptr pointer to memory to be freed
*/
void mem_free(void *ptr);
/**
* Changes the size of the memory block pointed to by ptr
* @param ptr pointer to the memory block to resize
* @param size new size in bytes
* @returns pointer to the resized memory block, 0 on failure
*/
void* mem_realloc(void *ptr, unsigned long size);
/**
* Reports memory usage statistics
* Prints information about the heap to stdout
*/
void mem_stats(void);
|
System Calls
O ficheiro kernel.asm contém as chamadas ao sistema que podem ser realizadas em programas escritos na linguagem em implementação. Uma explicação das chamadas ao sistema pode ser obtida através de:
prompt$ man 2 intro prompt$ man 2 syscalls
Algumas destas chamadas não existem na biblioteca de C, outras têm um comportamente diferente da rotina C homónima.