标签: pipe

如何处理Unix管道

如何在C++代码中从shell重定向获取文件名?ie ./MyProgram <myfile,我想逐行获取myfile作为文件名及其内容.

**编辑:我设法从文件中获取输入.谢谢您的帮助.但是,在循环遍历文件内容之后,我想用cin保持用户输入.就像这样:

while (true)
{
    if (cin.eof() == false)
    {
        getline(cin, line);
        cout << line;
    }else{
        cin >> choice;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ unix pipe

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

LINUX:在不离开当前文件夹的情况下列出外部文件夹或子文件夹的内容

我有一个ac程序,该程序监视您目录中某个位置的文件夹(程序启动时会给出位置)。它的任务之一是告诉用户该指定文件夹中存储了哪些内容。我当时正在考虑通过管道命令ls命令,但是不确定如何获取您当前不在其中的文件夹的内容。帮助?

谢谢!

c linux ls pipe

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

如何在C++中实现grep,以便它与管道(stdin等)一起使用?

我想为我在Windows中使用的Shell实现grep(仅用于学习目的).
我知道grep具有以下语法:

grep pattern files
Run Code Online (Sandbox Code Playgroud)

所以我可以做一个像这样的功能:

int grep(string stringToMatch, string fileName) // just one file
{
   // search file for stringToMatch
   // print line containing stringToMatch
}
Run Code Online (Sandbox Code Playgroud)

我的困惑是,当我使用这样的管道时,grep应该如何工作:

ls | grep someword
Run Code Online (Sandbox Code Playgroud)

我实现了"ls"将所有输出放在一个向量中并返回,所以我想我的grep应该在向量中搜索结果.那么正确的grep函数应该怎么样呢?我需要2个grep函数吗?

提前致谢.

c++ pipe

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

链接器错误与Hadoop管道

Hadoop n00b在这里,刚刚开始使用Hadoop Pipes.我在使用hadoop-0.20.203(当前最新版本)编译一个简单的WordCount示例时遇到链接器错误,该示例在hadoop-0.20.2中没有出现相同的代码

表单链接器错误:HadoopPipes.cc中对"EVP_sha1"的未定义引用.

EVP_sha1(以及我得到的所有未定义引用)都是openssl库的一部分,HadoopPipes.cc来自hadoop-0.20.203,但hadoop-0.20.2没有.

我已经尝试调整我的makefile链接到ssl库,但我还是运气不好.任何想法将不胜感激.谢谢!

PS,这是我目前的makefile:

CC = g++

HADOOP_INSTALL = /usr/local/hadoop-0.20.203.0

SSL_INSTALL = /usr/local/ssl

PLATFORM = Linux-amd64-64

CPPFLAGS = -m64 -I$(HADOOP_INSTALL)/c++/$(PLATFORM)/include -I$(SSL_INSTALL)/include

WordCount: WordCount.cc

    $(CC) $(CPPFLAGS) $< -Wall -Wextra -L$(SSL_INSTALL)/lib -lssl -lcrypto -L$(HADOOP_INSTALL)/c++/$(PLATFORM)/lib -lhadooppipes -lhadooputils -lpthread -g -O2 -o $@
Run Code Online (Sandbox Code Playgroud)

我正在使用的实际程序可以在http://cs.smith.edu/dftwiki/index.php/Hadoop_Tutorial_2.2_--_Running_C%2B%2B_Programs_on_Hadoop找到

hadoop pipe linker-errors

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

Haskell:runInteractiveCommand:如何忽略到目前为止给出的输出?

我通过"runInteractiveCommand"在haskell中运行一个外部交互程序,并希望读取程序的输出,直到它显示程序提示.到目前为止我有

checkConsistency cal nets = do
    (sparqIn, sparqOut, sparqErr, sparqId) <- runInteractiveCommand "sparq -i"
    mapM_ (flip hSetBinaryMode False) [sparqIn, sparqOut]
    hSetBuffering sparqIn LineBuffering
    hSetBuffering sparqOut NoBuffering
    hPutStrLn sparqIn ("load-calculus " ++ cal)
-- Here i need to wait for output and ignore it until the prompt is shown!
    sparqAnswers <- mapM (checkConsistencyWithSparq sparqIn sparqOut) nets
    return sparqAnswers
Run Code Online (Sandbox Code Playgroud)

我想我应该在while循环中使用"hReady"和"hGetChar",但我不确定如何完成它.或者也许有更好的方法?

亲切的问候,Annaluise

io haskell pipe process

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

这个打印订单有什么问题

看看这段代码:

 #include<stdio.h>
 #include <unistd.h>
    int main()
    {
            int pipefd[2],n;
            char buf[100];
            if(pipe(pipefd)<0)
                    printf("Pipe error");
            printf("\nRead fd:%d write fd:%d\n",pipefd[0],pipefd[1]);
            if(write(pipefd[1],"Hello Dude!\n",12)!=12)
                    printf("Write error");
            if((n=read(pipefd[0],buf,sizeof(buf)))<=0)
                    printf("Read error");
            write(1,buf,n);
            return 0;
    }
Run Code Online (Sandbox Code Playgroud)

我希望printf在从管道中读取Hello Dude之前打印Read fd并写入fd.但情况并非如此......请看这里.当我在我们的大学计算机实验室尝试相同的程序时,我的输出是

Read fd:3 write fd:4
Hello Dude!
Run Code Online (Sandbox Code Playgroud)

我们的朋友也很少观察到,更改printf语句以包含更多数量的\n字符会改变输出顺序......例如.. printf("\nRead fd:%d\n write fd:%d\n",pipefd[0],pipefd[1]);意味着打印了读取fd然后打印Hello Dude!了写入fd 的消息.这是什么行为?注意:Out lab使用我们运行终端的linux服务器,但我不记得编译器版本.

c pipe

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

与C中的close(fd)相反的是什么?

我正在尝试制作一个迷你shell,其中命令是相互管道的.在代码中的某些点我做:

close(1) //closing stdout
Run Code Online (Sandbox Code Playgroud)

close(0) //closing stdin
Run Code Online (Sandbox Code Playgroud)

但是后来我正在分叉,所以我希望我的新子进程重置所有内容.那我该怎么做:

*function_name_here*(1) //reopening stdout
Run Code Online (Sandbox Code Playgroud)

*function_name_here*(0) //reopening stdin
Run Code Online (Sandbox Code Playgroud)

c pipe file-descriptor

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

nohup和sed,重定向stderr和stdout

在我的服务器上nohup sleep 1 > nohup.out &没有提供帮助信息.好.
在我的笔记本电脑上运行相同的命令,我得到:nohup: ignoring input and redirecting stderr to stdout.虽然命令仍然正常运行并完成,但我不明白为什么在我的两台机器之间报告此消息存在差异.幸运的是,我可以通过简单地将stderr和stdout重定向到文件来解决我的笔记本电脑上的这个问题:nohup sleep 1 &> nohup.out &

所以....我想要做的是在我的笔记本电脑上实现一个更有用的命令:

以下在我的服务器上工作正常,并且没有报告消息:
nohup ls -1 *.txt | sed -e "s%\(.*\)%/home/user/scripts/script.pl -find \1 %" | sh > nohup.out &

这行代码"nohups"将一个文件管道列表导入到sed中,它们script.pl连续运行并在shell中执行.script.pl将数据打印到多个文件,并将一些信息打印到stdout.我通过将其写入名为的文件来捕获此信息nohup.out

现在,当我在笔记本电脑上运行这个单行时,我明白了nohup: ignoring input and redirecting stderr to stdout.这是预期的(但由于我不知道的原因).但是当我修改行重定向stderr和stdout时:
nohup ls -1 *.txt | sed -e "s%\(.*\)%/home/user/scripts/script.pl -find \1 %" | sh &> nohup.out &

我仍然得到消息 nohup: ignoring input and redirecting …

unix bash sed pipe nohup

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

在保留文件名的同时在unix中为"wc"管道文件

我有一堆myfile[somenumber]嵌套目录中的表单文件.

我想在每个文件上生成行数,并将该计数输出到文件.

这些文件是二进制文件,因此必须通过其他脚本传送open_file它们才能通过"wc"进行计数.我做:

ls ~/mydir/*/*/other_dir/myfile* | while read x; do open_file $x | wc -l; done > stats
Run Code Online (Sandbox Code Playgroud)

这是有效的,但问题是它将行计数输出到文件stats而不说原始文件名.例如,它输出:

100
150
Run Code Online (Sandbox Code Playgroud)

代替:

/mydir/...pathhere.../myfile1: 100
/mydir/...pathhere.../myfile2: 150
Run Code Online (Sandbox Code Playgroud)

第二个问题:

如果我想将数字wc -l除以常数,例如除以4,然后将其输出到文件中,该怎么办?

我知道行数是4的倍数,因此结果应该是整数.不知道如何从上面的脚本中做到这一点.

如何将原始文件名和wc -l结果放在输出文件中?

谢谢.

unix bash scripting pipe

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

尾管grep管xmllint不工作

我正在尝试使下面的命令工作,但没有打印o/p:

tail -f mylog.log | grep --line-buffered -Eo '<S:Envelope .+Envelope>' | xmllint --format --recover -
Run Code Online (Sandbox Code Playgroud)

但是,如果我从文件中grep相同的模式,并将其传递给xmllint,它的工作原理如下:

grep --line-buffered -Eo '<S:Envelope .+Envelope>' tmp.xml | xmllint --format --recover -
Run Code Online (Sandbox Code Playgroud)

我在第一个命令中缺少什么?

grep pipe tail xmllint

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

标签 统计

pipe ×10

c ×3

unix ×3

bash ×2

c++ ×2

file-descriptor ×1

grep ×1

hadoop ×1

haskell ×1

io ×1

linker-errors ×1

linux ×1

ls ×1

nohup ×1

process ×1

scripting ×1

sed ×1

tail ×1

xmllint ×1