試圖編寫一個處理內部和外部命令的shell。我可以一次獲得內部命令和一個外部命令。使用execv和輸入重定向的C++流水線命令
我的問題是如何獲得這樣的命令來運行:「ls -l命令| grep的LIB |廁所-l」
我用叉子(),並通過execv通過外部命令()在一個char * []中。
有關如何工作的任何想法?我假設使用pipe()或其他東西,但我不確定。
問題的第二部分:如何處理I/O重定向?任何人都可以指給我一個有用的地方嗎?
編輯 到目前爲止,@Alex W是我的英雄。然而,由於我是pipe()和dup2()命令的新手,我對每個調用和變量都有些猶豫。
下面的代碼我有一個處理一個單一的外部命令(例如=「ls -l命令-A」):
pid_t pid;
pid = fork();
if (pid < 0)
{
cout << "Fork failed." << endl;
}
else if (pid == 0)
{
execvp(exec_args[0], exec_args); //exec_args is a char*[] where
_exit (EXIT_FAILURE); //exec_args[0] contains "/bin/ls"
} //[1]="ls" and [2]="-l" [3]="-a"
else
{
int status;
waitpid(pid, &status, 0);
}
break;
你建議的方式正是我如何做到的。 (順便說一下,您可能會將您的問題標記爲「posix」,因爲它不適用於Windows程序員 - 即使您必須刪除其中一個其他標記才能執行此操作。) – thb
我在標記中添加了posix。基本上我正在尋找一些有關「pipe()」如何工作的見解 – twsmale
我明白了。試試'man 7 pipe'。 (您可能知道手冊的第7部分是系統概念記錄的地方。) – thb