我想从Haskell做一个popen()/ python的subprocess.communicate - 启动一个程序,给它stdin,并得到它的stdout/stderr.什么是最直接/最朴素的方式?
我试图在Bash中运行这个可怕的简单命令
java -cp nasa-top-secret.jar gov.nasa.RocketToMoon | grep -v codehaus
Run Code Online (Sandbox Code Playgroud)
但grep不起作用(它不会过滤掉我的字符串).如何java使用grep?过滤输出?
我想创建一个简单的程序,该fork,并且子进入命名管道,父进程从命名管道读取和显示.问题是它进入了父进程,进行了第一次printf然后它变得奇怪,它没有做任何其他事情,没有进入第二个printf,它只是在控制台中输入的方式.
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
void main()
{
char t[100];
mkfifo("myfifo",777);
pid_t pid;
pid = fork();
if (pid==0)
{
//execl("fifo2","fifo2",(char*)0);
char r[100];
printf("scrie2->");
scanf("%s",r);
int fp;
fp = open("myfifo",O_WRONLY);
write(fp,r,99);
close(fp);
printf("exit kid \n");
exit(0);
} else
{
wait(0);
printf("entered parent \n"); // <- this it prints
// whats below this line apparently its not being executed
int fz; printf("1");
fz = open("myfifo",O_RDONLY); printf("2");
printf("fd: %d",fz);
char p[100];
int size; …Run Code Online (Sandbox Code Playgroud) 针对真实用例的开放式问题(有创意!).基本上我想cat(1)现有文件(2)程序的输出和(3)特定的文本位.在管道,回声和重定向之间,我觉得我应该能做得比这更好!
pandoc -t latex -o mydoc.tex mydoc.rst
echo \\end{document} > footer.tex
cat header.tex mydoc.tex footer.tex > fulldoc.tex
Run Code Online (Sandbox Code Playgroud) 快问,
有没有办法通过perl将命令传递到另一个命令,就像在*Nix命令行中一样?
例如:
free -m | grep Mem
我怎么能在Perl中做"管道"?
希望是一个简单的问题.我正在尝试同时学习fork(),pipe()和waitpid()并遇到一些问题.
if (pipe(myout)<0 || pipe(myin)<0 || pipe(myerr)<0) { perror("Couldn't make pipes"); return; }
int childpid=fork();
if (childpid==0) { //child
fdopen(myout[1], "w");
fdopen(myin[1], "r");
fdopen(myerr[1], "w");
dup2(myout[1], 1);
dup2(myin[1], 0);
dup2(myerr[1], 2);
printf("This should be seen\n");
fclose(stdout); fclose(stdin); fclose(stderr);
sleep(10);
_exit(0);
} else { //parent, wait on child
printf("parent, monitoring\n");
sim_out=fdopen(myout[0], "r");
sim_in=fdopen(myin[0], "w");
sim_err=fdopen(myerr[0], "r");
printf("have my fds\n");
int status;
do {
int ch;
if (read(myout[0], &ch, 1)>0)
write(1, &ch, 1);
else printf("no go\n");
waitpid(childpid, &status, WNOHANG);
} while (!WIFEXITED(status) …Run Code Online (Sandbox Code Playgroud) 我的问题是我可以写一个整数到管道?如何 ?
我需要先制作3个流程,然后生成2个数字,第二个生成数字,第三个打印结果(USING PIPE)
谢谢大家
假设我有一个程序输出到由(必需)参数提供的文件:
./foo -o bar.txt
Run Code Online (Sandbox Code Playgroud)
有没有办法欺骗它输出到管道?这只是输出到一个名为的文件-.
./foo -o - | less
Run Code Online (Sandbox Code Playgroud) 我知道有很多线程都在谈论这个问题,但我真的不明白它的实现方式.
我正在尝试创建一个可以执行linux命令的shell,因为ps | grep | less
我已经通过将每个命令及其args放在一个简单的链接列表中来进行解析.
这是我的实现不起作用.希望足够清楚.
if ((son = fork()) < 0)
return printerr_sys("Unable to fork", 0);
if (son == 0)
{
if (first > 1 && data->format[first - 1] &&
is_directing_elt(data->format[first - 1]) == DIRECT_TPIPE)
dup2(tube_p[0], STDIN_FILENO);
first = make_argv(data, first, &argv);
if (next)
{
dup2(tube_v[1], STDOUT_FILENO);
close(tube_v[0]);
}
if (execvp(argv[0], argv) < 0)
return printerr_cmd(argv[0], 1);
}
else
{
if (next)
{
close(tube_v[1]);
cmdline_executer(data, next, tube_v);
}
waitpid(son, &(data->lastcmd), WUNTRACED);
data->lastcmd = WEXITSTATUS(data->lastcmd); …Run Code Online (Sandbox Code Playgroud) 在我的程序中,我有几个连接到stdout和stderr子进程流的管道(即在主进程中我正在从这些流中读取).但是,如果没有任何东西可以从其中一个中读取,我的程序就会挂起.有没有办法解决这个问题不使用线程.此外,如果在xmsecs 期间没有任何内容可读,我希望所有子进程都被杀死.
在unix中,select()+ non_blocking read解决了这两个问题.但是窗户怎么样?