Tag: shell

确定是否在C / C ++中重定向过程输出

我正在为Linux编写命令行实用程序。 如果输出(stdout)转到shell,那么打印一些转义来着色输出会很不错。 但是,如果输出被重定向,那么bash转义不应该打印,或者内容可能会破坏依赖于该输出的解析器。 有几个程序执行此操作(suck as ack )但我发现的是用Perl编写的,我无法找到他们是如何做到的。 我想用C / C ++来编写我的实用程序。

如何正确使用fork,exec,等待

我写的shell需要执行用户给它的程序。 这是我的程序的缩短版本 int main() { pid_t pid = getpid(); // this is the parents pid char *user_input = NULL; size_t line_sz = 0; ssize_t line_ct = 0; line_ct = getline(&user_input, &line_sz, stdin); //so get user input, store in user_input for (;;) { pid_t child_pid = fork(); //fork a duplicate process pid_t child_ppid = getppid(); //get […]

子进程之间的UNIX管道

我正在尝试编写一个程序,它将生成任意数量的子进程并在它们之间进行管道传输,类似于命令行管道。 在我的情况下,我正在尝试“ls -l | more”并将其输出到stdout,然后让父级继续执行更多命令。 我将以下代码作为最小示例: int main (int argc, const char * argv[]) { int fd[2]; pipe(fd); chdir(“/directory/with/lots/of/files”); // Create one child process for more int pid = fork(); if (pid == 0) { close(fd[1]); int ret = dup2(fd[0],0); if (ret < 0) perror("dup2"); char *argv[10]; argv[0] = "more"; argv[1] = NULL; execvp("more", argv); […]

如何使用C函数执行Shell内置命令?

我想通过像execv()这样的C语言函数执行Linux命令“pwd”。 问题是没有一个名为“pwd”的可执行文件,我无法执行“echo $ PWD”,因为echo也是一个没有可执行文件的内置命令。