fix readme

This commit is contained in:
Quinten Mennen 2025-02-06 16:15:59 +01:00
parent 75cbe896ce
commit 43583e5795
3 changed files with 207 additions and 139 deletions

314
README.md
View File

@ -1,155 +1,223 @@
# Minishell # Minishell
======= A lot of amazing shell stuff
## Dependencies ## Dependencies
- libreadline-dev - libreadline-dev
- libncurses-dev - libncurses-dev
## merge info ## TODO
origen/quinten -> willem: - Find absolute path for command input ('/', './', 'cmd')
- Add heredoc to tokenizer
ik het TokenType veranderd naar t_token_type vanwege de norm - Environment to `t_list`
- Get environment array (export)
Volgens mij had je een off-by-one error in ft_lexer_readword:85 - Preliminary signals
je moet de null terminator ook meerekenen in de malloc size - Define struct for commands, something like (
```c ```c
if (!(word = malloc(sizeof(char) * (i + 1)))) typedef struct s_command
``` {
char *command;
char *path;
char **args;
int fd_in;
int fd_out;
} t_command;
```
)
- Make the `executor`, run a command
- Make a parser to create a command list
- Add redirects, appends, pipe etc. File descriptor functions
- Expand \$ vars & support \$?
- __Bonus:__ Command tree for &&, ||, *
## Allowed Functions ## Allowed Functions
### `<fcntl.h>` ### `<readline/readline.h>`
* `open` * `readline`
* `int open(const char *pathname, int flags, ...);` * `char *readline(const char *prompt);`
* Opens a file specified by pathname. The flags argument determines the file access mode and file status flags. * Reads a line from the terminal with editing capabilities.
* `rl_clear_history`
### `<dirent.h>` * `void rl_clear_history(void);`
* `opendir` * Clears the history of lines read by readline.
* `DIR *opendir(const char *name);` * `rl_on_new_line`
* Opens a directory stream corresponding to the directory name, and returns a pointer to the directory stream. * `int rl_on_new_line(void);`
* `readdir` * Resets the state to indicate that a new line of input is being read.
* `struct dirent *readdir(DIR *dirp);` * `rl_replace_line`
* Reads the next directory entry from the directory stream pointed to by dirp. * `int rl_replace_line(const char *text, int clear_undo);`
* `closedir` * Replaces the contents of the current line with text.
* `int closedir(DIR *dirp);` * `rl_redisplay`
* Closes the directory stream associated with dirp. * `int rl_redisplay(void);`
* Redisplays the current input line.
### `<stdlib.h>` * `add_history`
* `malloc` * `void add_history(const char *line);`
* `void *malloc(size_t size);` * Adds the line to the history list.
* Allocates size bytes of memory and returns a pointer to the allocated memory.
* `free`
* `void free(void *ptr);`
* Frees the memory space pointed to by ptr, which must have been returned by a previous call to malloc.
### `<stdio.h>` ### `<stdio.h>`
* `printf` * `printf`
* `int printf(const char *format, ...);` * `int printf(const char *format, ...);`
* Sends formatted output to stdout. * Sends formatted output to stdout.
### `<sys/stat.h>` ### `<stdlib.h>`
* `stat` * `malloc`
* `int stat(const char *pathname, struct stat *statbuf);` * `void *malloc(size_t size);`
* Retrieves information about the file pointed to by pathname and fills in the stat structure. * Allocates size bytes of memory and returns a pointer to the allocated memory.
* `lstat` * `free`
* `int lstat(const char *pathname, struct stat *statbuf);` * `void free(void *ptr);`
* Similar to stat, but does not follow symbolic links. * Frees the memory space pointed to by ptr, which must have been returned by a previous call to malloc.
* `fstat`
* `int fstat(int fd, struct stat *statbuf);`
* Retrieves information about the file referred to by the open file descriptor fd.
### `<sys/wait.h>`
* `wait`
* `pid_t wait(int *wstatus);`
* Suspends execution of the calling process until one of its children terminates.
* `waitpid`
* `pid_t waitpid(pid_t pid, int *wstatus, int options);`
* Suspends execution of the calling process until the child specified by pid changes state.
* `wait3`
* `pid_t wait3(int *wstatus, int options, struct rusage *rusage);`
* Similar to wait, but also returns resource usage information.
* `wait4`
* `pid_t wait4(pid_t pid, int *wstatus, int options, struct rusage *rusage);`
* Similar to waitpid, but also returns resource usage information.
### `<signal.h>`
* `signal`
* `void (*signal(int signum, void (*handler)(int)))(int);`
* Sets a function to handle signal signum.
* `sigaction`
* `int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);`
* Examines and changes the action associated with a specific signal.
* `sigemptyset`
* `int sigemptyset(sigset_t *set);`
* Initializes the signal set pointed to by set to exclude all signals.
* `sigaddset`
* `int sigaddset(sigset_t *set, int signum);`
* Adds the individual signal specified by signum to the signal set pointed to by set.
* `kill`
* `int kill(pid_t pid, int sig);`
* Sends the signal sig to the process specified by pid.
### `<unistd.h>` ### `<unistd.h>`
* `write` * `write`
* `ssize_t write(int fd, const void *buf, size_t count);` * `ssize_t write(int fd, const void *buf, size_t count);`
* Writes up to count bytes from the buffer starting at buf to the file referred to by the file descriptor fd. * Writes up to count bytes from the buffer starting at buf to the file referred to by the file descriptor fd.
* `access` * `access`
* `int access(const char *pathname, int mode);` * `int access(const char *pathname, int mode);`
* Checks the file named by pathname for accessibility according to the bit pattern contained in mode. * Checks the file named by pathname for accessibility according to the bit pattern contained in mode.
* `open`
* `int open(const char *pathname, int flags, ...);`
* Opens a file specified by pathname. The flags argument determines the file access mode and file status flags.
* `read` * `read`
* `ssize_t read(int fd, void *buf, size_t count);` * `ssize_t read(int fd, void *buf, size_t count);`
* Reads up to count bytes from file descriptor fd into the buffer starting at buf. * Reads up to count bytes from file descriptor fd into the buffer starting at buf.
* `close` * `close`
* `int close(int fd);`q * `int close(int fd);`
* Closes the file descriptor fd. * Closes the file descriptor fd.
* `fork` * `fork`
* `pid_t fork(void);` * `pid_t fork(void);`
* Creates a new process by duplicating the calling process. * Creates a new process by duplicating the calling process.
### `<readline/readline.h>` ### `<sys/wait.h>`
* `readline` * `wait`
* `char *readline(const char *prompt);` * `pid_t wait(int *wstatus);`
* Reads a line from the terminal with editing capabilities. * Suspends execution of the calling process until one of its children terminates.
* `rl_clear_history` * `waitpid`
* `void rl_clear_history(void);` * `pid_t waitpid(pid_t pid, int *wstatus, int options);`
* Clears the history of lines read by readline. * Suspends execution of the calling process until the child specified by pid changes state.
* `rl_on_new_line` * `wait3`
* `int rl_on_new_line(void);` * `pid_t wait3(int *wstatus, int options, struct rusage *rusage);`
* Resets the state to indicate that a new line of input is being read. * Similar to wait, but also returns resource usage information.
* `rl_replace_line` * `wait4`
* `int rl_replace_line(const char *text, int clear_undo);` * `pid_t wait4(pid_t pid, int *wstatus, int options, struct rusage *rusage);`
* Replaces the contents of the current line with text. * Similar to waitpid, but also returns resource usage information.
* `rl_redisplay`
* `int rl_redisplay(void);` ### `<signal.h>`
* Redisplays the current input line. * `signal`
* `add_history` * `void (*signal(int signum, void (*handler)(int)))(int);`
* `void add_history(const char *line);` * Sets a function to handle signal signum.
* Adds the line to the history list. * `sigaction`
* `int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);`
* Examines and changes the action associated with a specific signal.
* `sigemptyset`
* `int sigemptyset(sigset_t *set);`
* Initializes the signal set pointed to by set to exclude all signals.
* `sigaddset`
* `int sigaddset(sigset_t *set, int signum);`
* Adds the individual signal specified by signum to the signal set pointed to by set.
* `kill`
* `int kill(pid_t pid, int sig);`
* Sends the signal sig to the process specified by pid.
### `<stdlib.h>`
* `exit`
* `void exit(int status);`
* Causes normal process termination and returns an exit status to the host environment.
### `<sys/stat.h>`
* `stat`
* `int stat(const char *pathname, struct stat *statbuf);`
* Retrieves information about the file pointed to by pathname and fills in the stat structure.
* `lstat`
* `int lstat(const char *pathname, struct stat *statbuf);`
* Similar to stat, but does not follow symbolic links.
* `fstat`
* `int fstat(int fd, struct stat *statbuf);`
* Retrieves information about the file referred to by the open file descriptor fd.
### `<unistd.h>`
* `unlink`
* `int unlink(const char *pathname);`
* Deletes a name from the filesystem.
* `pipe`
* `int pipe(int pipefd[2]);`
* Creates a pipe, a unidirectional data channel that can be used for interprocess communication.
* `dup`
* `int dup(int oldfd);`
* Duplicates the file descriptor oldfd.
* `dup2`
* `int dup2(int oldfd, int newfd);`
* Duplicates oldfd to newfd, closing newfd first if necessary.
* `execve`
* `int execve(const char *pathname, char *const argv[], char *const envp[]);`
* Executes the program referred to by pathname.
* `getcwd`
* `char *getcwd(char *buf, size_t size);`
* Gets the current working directory and stores it in the buffer pointed to by buf.
* `chdir`
* `int chdir(const char *path);`
* Changes the current working directory to the directory specified in path.
### `<dirent.h>`
* `opendir`
* `DIR *opendir(const char *name);`
* Opens a directory stream corresponding to the directory name, and returns a pointer to the directory stream.
* `readdir`
* `struct dirent *readdir(DIR *dirp);`
* Reads the next directory entry from the directory stream pointed to by dirp.
* `closedir`
* `int closedir(DIR *dirp);`
* Closes the directory stream associated with dirp.
### `<string.h>`
* `strerror`
* `char *strerror(int errnum);`
* Returns a pointer to the textual representation of the error number errnum.
* `perror`
* `void perror(const char *s);`
* Prints a descriptive error message to stderr.
### `<unistd.h>`
* `isatty`
* `int isatty(int fd);`
* Tests whether fd is an open file descriptor referring to a terminal.
* `ttyname`
* `char *ttyname(int fd);`
* Returns a pointer to the null-terminated pathname of the terminal associated with fd.
* `ttyslot`
* `int ttyslot(void);`
* Returns the index of the current user's terminal in the user accounting file.
### `<sys/ioctl.h>`
* `ioctl`
* `int ioctl(int fd, unsigned long request, ...);`
* Manipulates the underlying device parameters of special files.
### `<stdlib.h>`
* `getenv`
* `char *getenv(const char *name);`
* Searches the environment list for a string that matches the name.
### `<termios.h>` ### `<termios.h>`
* `tcsetattr` * `tcsetattr`
* `int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);` * `int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);`
* Sets the parameters associated with the terminal referred to by fd. * Sets the parameters associated with the terminal referred to by fd.
* `tcgetattr` * `tcgetattr`
* `int tcgetattr(int fd, struct termios *termios_p);` * `int tcgetattr(int fd, struct termios *termios_p);`
* Gets the parameters associated with the terminal referred to by fd. * Gets the parameters associated with the terminal referred to by fd.
### `<term.h>` ### `<term.h>`
* `tgetent` * `tgetent`
* `int tgetent(char *bp, const char *name);` * `int tgetent(char *bp, const char *name);`
* Loads the entry for name from the termcap database. * Loads the entry for name from the termcap database.
* `tgetflag` * `tgetflag`
* `int tgetflag(const char *id);` * `int tgetflag(const char *id);`
* Gets the boolean entry for id from the termcap database. * Gets the boolean entry for id from the termcap database.
* `tgetnum` * `tgetnum`
* `int tgetnum(const char *id);` * `int tgetnum(const char *id);`
* Gets the numeric entry for id from the termcap database. * Gets the numeric entry for id from the termcap database.
* `tgetstr` * `tgetstr`
* `char *tgetstr(const char *id, char **area);` * `char *tgetstr(const char *id, char **area);`
* Gets the string entry for id from the termcap database. * Gets the string entry for id from the termcap database.
* `tgoto` * `tgoto`
* `char *tgoto(const char *cap, int col, int row);` * `char *tgoto(const char *cap, int col, int row);`
* Returns a cursor addressing string for the given capability cap. * Returns a cursor addressing string for the given capability cap.
* `tputs` * `tputs`
* `int tputs(const char *str, int affcnt, int (*putc)(int));` * `int tputs(const char *str, int affcnt, int (*putc)(int));`
* Outputs the string str with padding. * Outputs the string str with padding.

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* :::::::: */ /* ::: :::::::: */
/* allowed.h :+: :+: */ /* allowed.h :+: :+: :+: */
/* +:+ */ /* +:+ +:+ +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/04 16:13:11 by whaffman #+# #+# */ /* Created: 2025/02/04 16:13:11 by whaffman #+# #+# */
/* Updated: 2025/02/04 16:13:12 by whaffman ######## odam.nl */ /* Updated: 2025/02/06 16:14:44 by qmennen ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -19,12 +19,12 @@
# include <string.h> # include <string.h>
# include <sys/types.h> # include <sys/types.h>
# include <sys/wait.h> # include <sys/wait.h>
# include <sys/stat.h>
# include <sys/ioctl.h>
# include <fcntl.h> # include <fcntl.h>
# include <errno.h> # include <errno.h>
# include <signal.h> # include <signal.h>
# include <dirent.h> # include <dirent.h>
# include <sys/stat.h>
# include <sys/ioctl.h>
# include <termios.h> # include <termios.h>
# include <term.h> # include <term.h>

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* :::::::: */ /* ::: :::::::: */
/* prompt.c :+: :+: */ /* prompt.c :+: :+: :+: */
/* +:+ */ /* +:+ +:+ +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/04 16:13:08 by whaffman #+# #+# */ /* Created: 2025/02/04 16:13:08 by whaffman #+# #+# */
/* Updated: 2025/02/05 17:05:12 by whaffman ######## odam.nl */ /* Updated: 2025/02/06 16:12:02 by qmennen ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */