echo(shell)和C语言

时间:2012-09-17 04:48:49

标签: c++ c bash shell

我有一个用C语言编写的程序。在这个程序中,我有一个整数变量QS。在执行程序期间,此变量的值会更改 在用C编写的这个程序中,我想使用echo命令shell

显示这个变量QS

我听说尿布C的system()功能让手使用终端或控制台

system(“echo $ QS”)当我这样做时,变量QS无法被识别,它什么也没有显示。

您对我如何做到这一点有什么具体的答案吗?以及如何用C语言识别变量?

我知道使用简单的printf,我可以显示这个变量,但我想要的是使用echo。

提前感谢您的回答。

4 个答案:

答案 0 :(得分:2)

Shell无法访问您的程序变量值。您必须先将值设置到环境中。有不同的方法来做到这一点。其中之一是(在linux / unix中工作)

int main()  
{  
    char chProgramVar[] = "hello world" ;  
    setenv("ShellVar", chProgramVar, 1) ;  
    system("echo $ShellVar") ;  
}  

答案 1 :(得分:2)

正如其他人所说,shell无法访问您的程序变量。您可以使用sprintf将值插入到将使用system执行的命令中:

char command[BUFSIZ];

sprintf(command, "echo %d", QS);
system(command);

答案 2 :(得分:1)

您使用system(3)调用产生的shell不知道C程序中的任何变量。执行所需操作的最简单方法是将数据导出为环境变量。由于通过调用system(3)继承了环境,因此您只需使用setenv(3)设置变量即可。但是,您必须先将其格式化为字符串:

int QS = ...;
char QSStr[32];  // Longest integer string is INT_MIN = -2147483648, assuming
                 // that sizeof(int) == 4
snprintf(QSStr, sizeof(QSStr), "%d", QS);  // Convert to string
setenv("QS", QSStr);  // Set the environment variable)
...
system("echo $QS");  // Will print the value of QS

答案 3 :(得分:-1)

您必须将数字格式化为字符字节。数字“4”具有不同的整数表示形式作为打印字符。

使用printf打印数字,或使用sprintf将其作为字符重新格式化为新缓冲区。然后,您可以使用系统回显打印新缓冲区(无论出于何种原因)。

char s[16]; // might be too small
sprintf(s, "%d", integer_var); 
// s is the string