1.open函數
????這個函數是打開一個文件(文件名叫pathname),以 flag 權限打開,flag 包括了以下幾種 O_RDONLY(只讀), O_WRONLY(只寫), O_RDWR(讀寫),當文件打開成功時,函數返回所要打開的文件名, 當函數執行失敗時,函數返回 -1.
2.write函數
?????write函數是打開一個文件描述符為 fd 的文件,并將該文件的內容寫到 buf 中, 同時期望寫 count 個字節,當函數執行成功時返回往 buf 中所寫的字節數, 失敗時返回值為 -1
3.之前編寫的自主shell進行修改,使其支持輸入/輸出/追加重定向
#include<stdio.h>
#include<fcntl.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>int main()
{char buf[1024] = { 0 };while(1){printf("mysell#");fflush(stdout);size_t s = read( 0, buf, sizeof( buf ) );if(s > 0){buf[s - 1] = '\0';printf("%s\n", buf);}char* start = buf;char* _argv[32];char* argnext[32];_argv[0] = buf;int i = 1;while(*start){if(*start == ' '){*start = '\0';start ++;_argv[i++] = start;}else{start ++;}}_argv[i] = NULL;pid_t pid;pid = fork();if(pid < 0){perror("fork");exit(1);}if(pid == 0){int i = 0;int fd = 0;for(i = 0; _argv[i] != NULL; i++){if(strcmp(_argv[i], ">") == 0){char* file_name = _argv[i + 1];_argv[i] = NULL;close(1);fd = open(file_name, O_CREAT | O_WRONLY, 0664);break;}}execvp(_argv[0], _argv);close(fd);}else if(pid > 0){int st = 0;waitpid(pid, NULL, 0);}}return 0;
}
????上一次寫了一個簡單的shell, 這次給其加上輸入重定向
????????????????????????????
????雖然加入了輸出重定向,但還沒有加入輸入重定向以及追加重定向,以及感到,在下一篇當中將會給其加入輸入重定向, 追加重定向以及管道。