2014-01-20 31 views
4

說我有一個exe,讓我們說sum.exe。現在說的sum.exe代碼如何從另一個程序運行程序並通過stdin在c或C++中將數據傳遞給它?

void main() 
{ 
int a,b; 
scanf ("%d%d", &a, &b); 
printf ("%d", a+b); 
} 

我想知道我可以從其他C/C++程序運行這個程序,並通過標準輸入傳遞輸入,就像他們在網上的編譯器等網站ideone做到哪裏i型代碼並在文本框中提供stdin數據,並使用scanf或cin程序接受該數據。另外,我想知道是否有任何方法從啓動它的原始程序讀取此程序的輸出。

+0

你看管道和它們如何工作? – cup

+1

['dup2'](http://www.cs.loyola.edu/~jglenn/702/S2005/Examples/dup2.html)可能會讓你到你想去的地方。祝你好運。 – WhozCraig

+0

您可以使用[std :: system](http://en.cppreference.com/w/cpp/utility/program/system)從命令行執行所有操作,包括重定向輸入和輸出。 – Hulk

回答

0

如何做是取決於平臺。

在windows下,使用CreatePipe和CreateProcess。您可以從MSDN找到例如: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx

Linux/Unix下,你可以使用dup()/dup2()

一種簡單的方法,這樣做是使用一個終端(在Windows類似的命令提示符),並使用|重定向輸入/輸出。

實施例:

program1 | program2 

這將程序1的輸出重定向到程序2的輸入。 要檢索/輸入日期,您可以使用臨時文件。如果您不想使用臨時文件,則必須使用管道。

對於Windows,(使用命令提示符):

program1 <input >output 

對於Linux,你可以在Linux終端

3

在C平臺上,其名稱以X結尾(即非Windows),關鍵部件是:

  1. pipe - 返回一對文件描述符,所以什麼寫入到一個可以讀出另一個。

  2. fork - 將進程分叉爲兩個,都保持運行相同的代碼。

  3. dup2 - 重新編號文件描述符。有了這個,你可以把一個管道的一端,並把它變成標準輸入或標準輸出。

  4. exec - 在同一過程中停止運行當前程序,開始運行另一個程序。

將它們結合在一起,你就可以得到你所要求的。

+1

你可能意思是「在Linux中,關鍵組件是」。 – Lundin

+2

@Lundin,你的意思可能是「在POSIX環境中......」) – Shahbaz

+0

@Shahbaz由於* nix的人似乎並不關心POSIX,所以基本上是一樣的。 – Lundin

0

聽起來好像你來自Windows環境,所以這可能不是你正在尋找的答案,但是從命令行你可以使用管道重定向操作符'|'將一個程序的stdout重定向到另一個程序的stdin。 http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true

你可能會更好過在bash shell工作,你可以得到在Windows上使用Cygwin http://cygwin.com/

而且,你的例子看起來像C的混合++和C,主要ISN」的聲明t完全是一個公認的標準。

3

打字man tee我知道最簡單的方法使用tee工具,你可以找到詳細的指令這樣做是通過使用popen()函數。它適用於Windows和UNIX。另一方面,popen()只允許單向通信。

例如,將信息傳遞給sum.exe(雖然你將無法讀回的結果),你可以這樣做:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE *f; 

    f = popen ("sum.exe", "w"); 
    if (!f) 
    { 
     perror ("popen"); 
     exit(1); 
    } 

    printf ("Sending 3 and 4 to sum.exe...\n"); 
    fprintf (f, "%d\n%d\n", 3, 4); 

    pclose (f); 
    return 0; 
} 
0

這是我的解決方案,它的工作:

sum.cpp

#include "stdio.h" 
int main(){ 
    int a,b; 
    scanf ("%d%d", &a, &b); 
    printf ("%d", a+b); 
    return 0; 
} 

TEST.CPP

#include <stdio.h> 
#include <stdlib.h> 

int main(){ 
    system("./sum.exe < data.txt"); 
    return 0; 
} 

的data.txt

3 4 

嘗試這種解決方案:)

相關問題