2012-10-29 28 views
0

我目前有一個C++ Linux程序,它從文件中讀取參數「P」並將其加載到RAM中以供進一步操作。該文件有以下行:作爲變量的Shell輸入

P = 123 

我想程序從shell輸入,而不是文件。我接受所有選項,只要我可以在SSH中連接時手動輸入P. 我心目中是什麼樣的輸入提示:

sudo myprogram start 
enter P value : (I would manually enter "123" here) 

或者,也許一個論點:

sudo myprogram start 123 

它必須是簡單的事,但我不知道怎麼回事,所以任何幫助是很大的讚賞!

+1

'$幫助read'。 – bobbogo

+0

'myprogram'是你的C++可執行文件嗎? –

+0

@KingsIndian:是的----- bobbogo:您能否添加詳細信息?我不確定如何理解 –

回答

1

如果這是該文件的唯一數據,那麼文件操作是不必要的。 只需將123(或其他)傳遞給C++程序並將字符串轉換爲整數。

假設你傳遞整數作爲第二個參數,那麼:

int p = atoi(argv[2]); 

一個更好的選擇是使用與strtol:

char *s, *ptr; 

s = argv[1]; 
int p = strtol(s, &ptr, 10); 

如果您不能更改到C++然後,代碼簡單地做:

echo "P = 123" > file && myprogram start 

如果你的文件有更多的內容,你不能簡單地做呼應然後,更換新的價值既有線:

sed -i "s/P = [0-9]*/P = 123/" file && myprogram start 
+0

如果我正確理解了你,一旦我以「start」作爲第一個參數並且「P」作爲第二個參數調用myprogram,程序可以直接將P值放入RAM中並使用它,就好像它是從文件 ? –

+0

運行它時,整個C++可執行文件都在RAM中。將P放入RAM *是什麼意思?如果您的C++代碼使用該值,則從命令行傳遞並刪除文件讀取部分。 –

+0

我需要參數解析器庫嗎? –

0

這是基本的C++。看看下面的示例代碼或訪問site我複製它。

#include <iostream> 

// When passing char arrays as parameters they must be pointers 
int main(int argc, char* argv[]) { 
    if (argc < 5) { // Check the value of argc. If not enough parameters have been passed, inform user and exit. 
     std::cout << "Usage is -in <infile> -out <outdir>\n"; // Inform the user of how to use the program 
     std::cin.get(); 
     exit(0); 
    } else { // if we got enough parameters... 
     char* myFile, myPath, myOutPath; 
     std::cout << argv[0]; 
     for (int i = 1; i < argc; i++) { /* We will iterate over argv[] to get the parameters stored inside. 
              * Note that we're starting on 1 because we don't need to know the 
              * path of the program, which is stored in argv[0] */ 
      if (i + 1 != argc) // Check that we haven't finished parsing already 
       if (argv[i] == "-f") { 
        // We know the next argument *should* be the filename: 
        myFile = argv[i + 1]; 
       } else if (argv[i] == "-p") { 
        myPath = argv[i + 1]; 
       } else if (argv[i] == "-o") { 
        myOutPath = argv[i + 1]; 
       } else { 
        std::cout << "Not enough or invalid arguments, please try again.\n"; 
        Sleep(2000); 
        exit(0); 
      } 
      std::cout << argv[i] << " "; 
     } 
     //... some more code 
     std::cin.get(); 
     return 0; 
    } 
} 
0

不要你只是想提示,你的C++內程序,輸入值? 如果這是你想要的,這個簡單的代碼將做的工作:在bash

#include <iostream> 
int main(int argc, char **argv) { 
    int p = 0; 
    std::cout << "Enter P value: "; 
    std::cin >> p; 
    std::cout << "Entered value: " << p << std::endl; 
    return 0; 
} 
+2

C++ IOStreams不太適合這種交互式提示。最好從命令行或標準輸入讀取值,但不要提示。 –