diff options
Diffstat (limited to 'myfind/myexecvp')
| -rw-r--r-- | myfind/myexecvp/Makefile | 17 | ||||
| -rw-r--r-- | myfind/myexecvp/myexecvp.c | 26 |
2 files changed, 43 insertions, 0 deletions
diff --git a/myfind/myexecvp/Makefile b/myfind/myexecvp/Makefile new file mode 100644 index 0000000..f5ae43f --- /dev/null +++ b/myfind/myexecvp/Makefile @@ -0,0 +1,17 @@ +CC = gcc CFLAGS = -std = c99 - pedantic - Werror - Wall - Wextra + - Wvla + + SRC = myexecvp.c OBJ = $(SRC + :.c =.o) + + all + : $(OBJ) $(CC) + - o myexecvp $(OBJ) + + $(OBJ) + : $(SRC) + + .PHONY + : clean + + clean : $(RM) $(OBJ) myexecvp diff --git a/myfind/myexecvp/myexecvp.c b/myfind/myexecvp/myexecvp.c new file mode 100644 index 0000000..30cd519 --- /dev/null +++ b/myfind/myexecvp/myexecvp.c @@ -0,0 +1,26 @@ +#include <sys/types.h> +#include <sys/wait.h> +#include <unistd.h> + +int main(int argc, char **argv) +{ + if (argc < 2) + return 1; + + pid_t child = fork(); + if (child == -1) + { + return 1; + } + else if (child == 0) + { + execvp(argv[1], argv + 1); + return 1; + } + else + { + int retval; + waitpid(child, &retval, 0); + return (retval == 0) ? 0 : 1; + } +} |
