日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

修改之前的myshell使之支持输入输出重定向

發(fā)布時間:2023/11/30 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 修改之前的myshell使之支持输入输出重定向 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.open函數(shù)

????這個函數(shù)是打開一個文件(文件名叫pathname),以 flag 權(quán)限打開,flag 包括了以下幾種 O_RDONLY(只讀), O_WRONLY(只寫), O_RDWR(讀寫),當(dāng)文件打開成功時,函數(shù)返回所要打開的文件名, 當(dāng)函數(shù)執(zhí)行失敗時,函數(shù)返回 -1.
2.write函數(shù)

?????write函數(shù)是打開一個文件描述符為 fd 的文件,并將該文件的內(nèi)容寫到 buf 中, 同時期望寫 count 個字節(jié),當(dāng)函數(shù)執(zhí)行成功時返回往 buf 中所寫的字節(jié)數(shù), 失敗時返回值為 -1
3.之前編寫的自主shell進(jìn)行修改,使其支持輸入/輸出/追加重定向

#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, 這次給其加上輸入重定向
????????????????????????????

????雖然加入了輸出重定向,但還沒有加入輸入重定向以及追加重定向,以及感到,在下一篇當(dāng)中將會給其加入輸入重定向, 追加重定向以及管道。

總結(jié)

以上是生活随笔為你收集整理的修改之前的myshell使之支持输入输出重定向的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。