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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 重定向 2gt;gt;,编写我自己的linux shell I / O重定向’gt;’函数

發(fā)布時間:2025/3/20 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 重定向 2gt;gt;,编写我自己的linux shell I / O重定向’gt;’函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我正在編寫重定向函數(shù),將命令的輸出寫入給定的文件名.

例如:

echo Hello World> hello.txt會將’Hello World’寫入hello.txt.

ls -al> file_list.txt會將當(dāng)前目錄中所有文件/目錄名稱的列表寫入file_list.txt.

到目前為止,我的功能定義為:

int my_redirect(char **args, int count) {

if (count == 0 || args[count + 1] == NULL) {

printf("The redirect function must follow a command and be followed by a target filename.\n");

return 1;

}

char *filename = args[count + 1];

//Concatenates each argument into a string separated by spaces to form the command

char *command = (char *) malloc(256);

for (int i = 0; i < (count); i++) {

if (i == 0) {

strcpy(command, args[i]);

strcat(command, " ");

}

else if (i == count - 1) {

strcat(command, args[i]);

}

else {

strcat(command, args[i]);

strcat(command, " ");

}

}

//command execution to file goes here

free(command);

return 1;

}

其中args [count]是“>”.

如何執(zhí)行args [0]到args [count-1]的字符串給出的命令到args [count 1]給出的文件?

編輯

這些是我們給出的指示:

“通過向文件添加stdout的重定向來改進你的shell.只有在完成功能后才嘗試1.為>解析行,將所有內(nèi)容作為命令,然后將第一個單詞作為文件名(忽略> ;,|等).

標準輸出被寫出到文件描述符1(stdin為0,stderr為2).因此,可以通過打開文件,并使用dup2系統(tǒng)調(diào)用將其文件描述符復(fù)制到1來實現(xiàn)此任務(wù).

int f = open( filename , O_WRONLY|O_CREAT|O_TRUNC, 0666) ;

dup2( f , 1 ) ;

注意:使用系統(tǒng)調(diào)用open not library wrapper fopen here.“

解決方法:

如果允許您以特殊方式解決此問題,那么它僅適用于一系列問題,例如將命令的stdout捕獲到文件中,您可以使用< stdio中的popen()函數(shù)重新發(fā)明輪子.H取代.

該計劃草圖:

>確定輸出文件名

>打開輸出文件進行寫入

>確定命令和參數(shù)

>構(gòu)造從args到>的命令字符串.

>調(diào)用FILE * cmd = popen(命令,“r”);

>從cmd流讀取行,寫入輸出文件

>在cmd流上沒有EOF的情況下轉(zhuǎn)到6.

> pclose(cmd),fclose輸出流

只有當(dāng)您的教師不希望您使用fork,dup和friends時才這樣做.

標簽:shell,c-3,linux,io-redirection

來源: https://codeday.me/bug/20190711/1431445.html

總結(jié)

以上是生活随笔為你收集整理的linux 重定向 2gt;gt;,编写我自己的linux shell I / O重定向’gt;’函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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