小编Ton*_*nas的帖子

读取C块上的UNIX管道

我正在努力用类管道实现一个shell.

typedef struct {
    char** cmd;
    int in[2];
    int out[2];
} cmdio;

cmdio cmds[MAX_PIPE + 1];
Run Code Online (Sandbox Code Playgroud)

管道中的命令被读取并存储在其中cmds.

cmdio[i].in是返回的输入管道的文件描述符对pipe().对于从终端输入读取的第一个命令,它只是{fileno(stdin), - 1}.cmdin[i].out输出管道/终端输出类似.cmdio[i].in是一样的cmd[i-1].out.例如:

$ ls -l | sort | wc

CMD: ls -l 
IN: 0 -1
OUT: 3 4

CMD: sort 
IN: 3 4
OUT: 5 6

CMD: wc 
IN: 5 6
OUT: -1 1
Run Code Online (Sandbox Code Playgroud)

我们将每个命令传递给process_command,它执行许多操作:

for (cmdi = 0; cmds[cmdi].cmd != NULL; cmdi++) {
    process_command(&cmds[cmdi]);
}
Run Code Online (Sandbox Code Playgroud)

现在,在process_command中:

if (!(pid_fork = fork())) …
Run Code Online (Sandbox Code Playgroud)

c unix pipe

7
推荐指数
1
解决办法
3069
查看次数

在 .bashrc 扩展的 $PATH 在 git 钩子脚本中不可用

当在存储库中收到推送时,我需要运行某个命令。该二进制文件位于我添加到 .bashrc 的自定义路径中,并且在 shell 中正常工作。我写了一个小脚本作为 git hook。但是,.bashrc 添加的内容似乎不会影响此脚本。

我试过放在bash ~/.bashrc脚本的顶部,但没有用。如果我手动运行脚本,比如说$ sh post-receive,它工作得很好。怎么了?

git bash

4
推荐指数
1
解决办法
1413
查看次数

标签 统计

bash ×1

c ×1

git ×1

pipe ×1

unix ×1