标签: pipe

如何判断管道上是否有新数据?

我正在 Windows 上工作,我正在尝试学习管道及其工作原理。

我还没有发现的一件事是如何判断管道上是否有新数据(来自管道的子/接收器端?

通常的方法是有一个线程读取数据并将其发送以进行处理:

void GetDataThread()
{
    while(notDone)
    {
        BOOL result = ReadFile (pipe_handle, buffer, buffer_size, &bytes_read, NULL);
        if (result) DoSomethingWithTheData(buffer, bytes_read);
        else Fail();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是 ReadFile() 函数等待数据,然后读取数据。有没有一种方法可以判断是否有新数据,而无需实际等待新数据,如下所示:

void GetDataThread()
{
    while(notDone)
    {
        BOOL result = IsThereNewData (pipe_handle);
        if (result) {
             result = ReadFile (pipe_handle, buffer, buffer_size, &bytes_read, NULL);
             if (result) DoSomethingWithTheData(buffer, bytes_read);
             else Fail();
        }

        DoSomethingInterestingInsteadOfHangingTheThreadSinceWeHaveLimitedNumberOfThreads();
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ winapi pipe named-pipes

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

当 stderr 在 stdout 之后重定向时会发生什么?

stderr当重定向之后会发生什么stdout,反之亦然?

例如:

someCommand > log.txt 2>&1

someCommand 2>&1 > log.txt

bash shell pipe

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

如何延迟管道 netcat 在第一个输入上进行连接

Ubuntu下bash运行:

我有一个源可以生成一些输出,但不是立即生成。让我们假设它是第一个在套接字上侦听的 netcat:netcat -l 12345

我想将其通过管道传输到传出的 netcat(通过 TCP 连接),例如netcat -l 12345 | netcat localhost 54321。但棘手的一点是,我知道当我运行命令时,本地主机 54321 上没有任何东西监听传入连接,但我知道当第一个实际字符通过管道到达时将会有一个监听。

所以我的问题是:有没有办法:

  • 延迟执行传出的 netcat,直到第一个字符到达管道,或者
  • 延迟传出的 netcat 尝试建立 TCP 连接,直到它收到标准输入上的第一个字符?(在 man 中没有直接选项,切换到 UDP 是不可接受的)

提前致谢!

编辑:实际上,源比 netcat 更复杂,即它是一个通过各种流修改进行管道传输的监听 netcat。

linux pipe netcat

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

在 C 中使用 execvpe 执行命令

对于一个项目,我应该将命令的输出通过管道传输到我的 C 程序(称为执行),然后该程序将执行该命令。

\n\n

例如,运行这个:\n echo ls -lR /usr | ./execute,将获取输出 ( ls -lR /usr) 并将其传递到我的 C 程序中,然后该程序将执行ls -lR /usr

\n\n

根据指示,我应该用来execvpe()实际执行程序,但是我找不到任何有意义的文档,也无法在不出现这些错误的情况下让它工作:

\n\n
execute.c: In function \xe2\x80\x98main\xe2\x80\x99:\nexecute.c:98: warning: implicit declaration of function \xe2\x80\x98getenv\xe2\x80\x99\nexecute.c:98: warning: assignment makes pointer from integer without a cast\nexecute.c:106: warning: implicit declaration of function \xe2\x80\x98execvpe\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的教授说我必须#include <unistd.h>解析<stdio.h>程序的输入(我也这样做了),然后执行以下操作:

\n\n
int main(void) {\n    char *path;\n    path = getenv("PATH");\n    char *envp[] = {path, NULL};\n    // the initialized array below …
Run Code Online (Sandbox Code Playgroud)

c linux pipe segmentation-fault

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

打开从 os.listdir() 找到的文件并对文件执行任务

所以我想打开一个目录中的每个文件(这个目录中有4个纯文本文档)。并执行诸如查找特定单词及其在每个文件中出现的次数之类的操作。

这是我使用的代码,但是我得到了没有这样的文件或目录的错误,但是我在打印路径时,它清楚地显示了每个文件的名称。

import re
import os

path = 'C:\\Python27\\projects\\Alabama\\New folder'

pattern = re.compile(r"\bmay not\b",re.IGNORECASE)
pattern1 = re.compile(r"\bshall\b",re.IGNORECASE)
pattern2 = re.compile(r"\bmust\b",re.IGNORECASE)
pattern3 = re.compile(r"\bprohibited\b",re.IGNORECASE)
pattern4 = re.compile(r"\brequired\b",re.IGNORECASE)

for filenames in os.listdir(path):
 with open(filenames) as myfile:
    total = 0
    total1 = 0
    total2 = 0
    total3 = 0
    total4 = 0
    for line in myfile:
        m = re.findall(pattern, line)
        m1 = re.findall(pattern1, line)
        m2 = re.findall(pattern2, line)
        m3 = re.findall(pattern3, line)
        m4 = re.findall(pattern4, line)
        total += len(m)
        total1 += len(m1)
        total2 …
Run Code Online (Sandbox Code Playgroud)

python directory file pipe python-2.7

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

如何通过管道将命令输出传递给curl

我正在使用curl 将一些urlencoded 内容发布到URL,并且我希望curl 命令的内容来自管道。基本上...

... | curl -s --data-urlencode '{\"text\":\"$PIPE_RESULT\"}' http://...

我认为 $0 可能有效,但我收到 invalid_payload 错误,其简单文本如下:

echo "http://www.example.com" | curl -s --data-urlencode '{"text\":\"$0\"}' https:/...

curl pipe

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

为什么我的 Ramda 管道功能不能与过滤器一起使用?

我有一个柯里化函数,我在组合中使用它,它有效:

const getClubs = R.filter(R.propEq('suit', 'CLUBS'))
Run Code Online (Sandbox Code Playgroud)

这是接收一系列纸牌对象并按它们的花色过滤它们。

但是当我尝试取消嵌套这个函数调用并将其变成管道时:

const getClubs = R.pipe(R.filter, R.propEq('suit', 'CLUBS'))
Run Code Online (Sandbox Code Playgroud)

...这不再起作用,我什至没有收到任何错误。我的管道或过滤器功能做错了什么?

这是我的代码的工作版本

在第 8 行和第 9 行之间切换以查看我上面描述的问题

javascript functional-programming pipe filter ramda.js

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

允许 &lt;a&gt; 标签标题属性中包含 html

我试图找到这个问题的解决方案,到目前为止我已经想出了这个允许 HTML 的管道

import { PipeTransform, Pipe } from "@angular/core";

@Pipe({
    name: "toHtml"
})
export class ToHtmlPipe implements PipeTransform {
    transform(content) {
        return `<b>${content}</b>`;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个链接,它在悬停时显示数据工具提示:

<a *ngIf="day.Info.Info" data-toggle="tooltip" [title]="day.Info.Info | toHtml" placement="right"><i style="color:black" class="glyphicon glyphicon-comment"></i></a>
Run Code Online (Sandbox Code Playgroud)

然而,这是我得到的结果:

在此输入图像描述

所以管道不起作用,据我所知,我无法使用[innerHtml]="",因为它只是更改了字符串的链接,而不是图标。

在此先感谢您的帮助

javascript pipe tooltip angular

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

设置数字格式以将分数置于千位

我需要格式化一个数字以将点数放入数千个,我需要使用角度 2 中的管道对其进行格式化。Ejem:数字是 1983839,结果必须是 1.983.839 知道吗?

{{amount | number}}
Run Code Online (Sandbox Code Playgroud)

format pipe angular

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

根据管道内的向量重命名列

我有一个df包含列A和的 data.frame B

df <- data.frame(A = 1:5, B = 11:15)
Run Code Online (Sandbox Code Playgroud)

还有另一个 data.frame ,df2我通过各种计算构建它,最终具有通用列名称 X1 和 X2,我无法直接控制它们(因为它在某一点作为矩阵传递)。所以它最终会变成这样:

mtrx <- matrix(1:10, ncol = 2)
mtrx %>% data.frame()
Run Code Online (Sandbox Code Playgroud)

我想将 df2 中的列重命名为与 df 相同。当然,我可以在通过简单的分配完成构建 df2 后执行此操作:

names(df2)<-names(df)
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 有没有办法直接在管道内执行此操作?我似乎无法使用 dplyr::rename,因为它们必须采用 newname=oldname 的形式,而且我似乎无法对其进行矢量化。调用data.frame本身也是如此 - 据我所知,我不能只给它一个列名向量。我还缺少另一个选择吗?我希望是这样的

mtrx %>% data.frame() %>% rename(names(df))
Run Code Online (Sandbox Code Playgroud)

但这不起作用 - 给出错误Error: All arguments must be named

干杯!

r pipe

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