perf: fix something
This commit is contained in:
parent
54ea6337e9
commit
d9f5d5a708
2 changed files with 29 additions and 21 deletions
43
exec.c
43
exec.c
|
@ -1,32 +1,32 @@
|
||||||
/*
|
/*
|
||||||
* @Author: 1ridic
|
* @Author: 1ridic
|
||||||
* @Date: 2022-09-18 14:14:23
|
* @Date: 2022-09-18 14:14:23
|
||||||
* @Last Modified by: 1ridic
|
* @Last Modified by: 1ridic
|
||||||
* @Last Modified time: 2022-09-18 14:44:37
|
* @Last Modified time: 2022-09-18 23:21:56
|
||||||
*/
|
*/
|
||||||
|
#include "builtin.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/types.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "builtin.h"
|
|
||||||
|
|
||||||
extern int (*builtin_func[]) (char **);
|
extern int (*builtin_func[])(char **);
|
||||||
extern char* builtin_cmd[];
|
extern char *builtin_cmd[];
|
||||||
|
|
||||||
int forkExec(char **args) {
|
int forkExec(char **args) {
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
int status;
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("debug: fork enter.\n");
|
printf("debug: fork enter.\n");
|
||||||
#endif
|
#endif
|
||||||
pid = fork();
|
pid = fork();
|
||||||
if (pid == 0) {
|
if (pid == 0) {
|
||||||
/* child process */
|
/* child process */
|
||||||
if (execvp(args[0], args) == -1) {
|
if (execvp(args[0], args) == -1) {
|
||||||
perror("dish");
|
perror("dish");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
} else if (pid < 0) {
|
} else if (pid < 0) {
|
||||||
/* fork error */
|
/* fork error */
|
||||||
perror("dish");
|
perror("dish");
|
||||||
|
@ -34,11 +34,18 @@ int forkExec(char **args) {
|
||||||
extern char volatile isWaiting;
|
extern char volatile isWaiting;
|
||||||
isWaiting = 1;
|
isWaiting = 1;
|
||||||
/* parent process: wait child process*/
|
/* parent process: wait child process*/
|
||||||
pid=wait(&status);
|
int stat_val;
|
||||||
isWaiting = 0;
|
waitpid(pid, &stat_val, 0);
|
||||||
|
if (WIFEXITED(stat_val)) {
|
||||||
|
isWaiting = 0;
|
||||||
|
return WEXITSTATUS(stat_val);
|
||||||
|
}
|
||||||
|
else if (WIFSIGNALED(stat_val)) {
|
||||||
|
isWaiting = 1;
|
||||||
|
return WTERMSIG(stat_val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return WEXITSTATUS(status);
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int commandExec(char **args) {
|
int commandExec(char **args) {
|
||||||
|
|
7
main.c
7
main.c
|
@ -2,13 +2,13 @@
|
||||||
* @Author: 1ridic
|
* @Author: 1ridic
|
||||||
* @Date: 2022-09-18 14:13:59
|
* @Date: 2022-09-18 14:13:59
|
||||||
* @Last Modified by: 1ridic
|
* @Last Modified by: 1ridic
|
||||||
* @Last Modified time: 2022-09-18 22:34:28
|
* @Last Modified time: 2022-09-18 23:21:37
|
||||||
*/
|
*/
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <strings.h>
|
#include <string.h>
|
||||||
#include "loop.h"
|
#include "loop.h"
|
||||||
|
|
||||||
char volatile isWaiting = 0;
|
char volatile isWaiting = 0;
|
||||||
|
@ -33,7 +33,8 @@ int main(int argc, char *argv[]) {
|
||||||
fprintf(stdout,"\033[H\033[J");
|
fprintf(stdout,"\033[H\033[J");
|
||||||
/* open history file */
|
/* open history file */
|
||||||
extern FILE* hf;
|
extern FILE* hf;
|
||||||
hf = fopen(strcat(getenv("HOME"), "/.dish_history"), "a+");
|
const char* hf_path=strcat(getenv("HOME"), "/.dish_history");
|
||||||
|
hf = fopen(hf_path, "a+");
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stdout,"DEBUG is defined\n");
|
fprintf(stdout,"DEBUG is defined\n");
|
||||||
|
|
Loading…
Reference in a new issue