生活随笔
收集整理的這篇文章主要介紹了
修改之前的myshell使之支持输入输出重定向
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.open函數(shù)
????這個(gè)函數(shù)是打開(kāi)一個(gè)文件(文件名叫pathname),以 flag 權(quán)限打開(kāi),flag 包括了以下幾種 O_RDONLY(只讀), O_WRONLY(只寫(xiě)), O_RDWR(讀寫(xiě)),當(dāng)文件打開(kāi)成功時(shí),函數(shù)返回所要打開(kāi)的文件名, 當(dāng)函數(shù)執(zhí)行失敗時(shí),函數(shù)返回 -1.
2.write函數(shù)
?????write函數(shù)是打開(kāi)一個(gè)文件描述符為 fd 的文件,并將該文件的內(nèi)容寫(xiě)到 buf 中, 同時(shí)期望寫(xiě) count 個(gè)字節(jié),當(dāng)函數(shù)執(zhí)行成功時(shí)返回往 buf 中所寫(xiě)的字節(jié)數(shù), 失敗時(shí)返回值為 -1
3.之前編寫(xiě)的自主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;
}
????上一次寫(xiě)了一個(gè)簡(jiǎn)單的shell, 這次給其加上輸入重定向
????????????????????????????
????雖然加入了輸出重定向,但還沒(méi)有加入輸入重定向以及追加重定向,以及感到,在下一篇當(dāng)中將會(huì)給其加入輸入重定向, 追加重定向以及管道。
總結(jié)
以上是生活随笔為你收集整理的修改之前的myshell使之支持输入输出重定向的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。