c ++ linux系统命令

时间:2011-06-28 13:06:25

标签: c++ c linux function system

我有以下问题:

我在我的程序中使用了这个函数:

  system("echo -n 60  > /file.txt"); 

它工作正常。

但我不想拥有恒定的价值。我这样做了:

   curr_val=60;
   char curr_val_str[4];
   sprintf(curr_val_str,"%d",curr_val);
   system("echo -n  curr_val_str > /file.txt");

我检查了我的字符串:

   printf("\n%s\n",curr_val_str);

是的,这是对的。 但在这种情况下system不起作用,并且不返回-1。我只是打印字符串!

如何传输像整数这样的变量,这些变量将以整数形式打印,但不是字符串?

所以我想要变量int a并且我想在文件中打印带有系统函数的值。我的file.txt的真实路径是/ proc / acpi / video / NVID / LCD / brightness。我不能用fprintf写。我不知道为什么。

9 个答案:

答案 0 :(得分:9)

你不能像你想要的那样连接字符串。试试这个:

curr_val=60;
char command[256];
snprintf(command, 256, "echo -n %d > /file.txt", curr_val);
system(command);

答案 1 :(得分:8)

system函数接受一个字符串。在你的情况下,它使用文本* curr_val_str *而不是该变量的内容。而不是使用sprintf来生成数字,而是使用它生成您需要的整个系统命令,即

sprintf(command, "echo -n %d > /file.txt", curr_val);

首先确保命令足够大。

答案 2 :(得分:7)

在您的情况下实际(错误地)执行的命令是:

 "echo -n curr_val_str  > /file.txt"

相反,你应该这样做:

char full_command[256];
sprintf(full_command,"echo -n  %d  > /file.txt",curr_val);
system(full_command);

答案 3 :(得分:4)

#define MAX_CALL_SIZE 256
char system_call[MAX_CALL_SIZE];
snprintf( system_call, MAX_CALL_SIZE, "echo -n %d > /file.txt", curr_val );
system( system_call );

man snprintf

答案 4 :(得分:2)

正确的方法与此类似:

curr_val=60;
char curr_val_str[256];
sprintf(curr_val_str,"echo -n  %d> /file.txt",curr_val);
system(curr_val_str);

答案 5 :(得分:2)

请不要。 :)

为什么要求system()进行如此简单的操作?

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

int write_n(int n, char * fname) {

    char n_str[16];
    sprintf(n_str, "%d", n);

    int fd;
    fd = open(fname, O_RDWR | O_CREAT);

    if (-1 == fd)
        return -1; //perror(), etc etc

    write(fd, n_str, strlen(n_str)); // pls check return value and do err checking
    close(fd);

}

答案 6 :(得分:2)

您是否考虑过使用C ++的iostreams工具而不是炮轰echo?例如(未编译):

std::ostream str("/file.txt");
str << curr_val << std::flush;

或者,传递给system的命令必须完全格式化。像这样:

curr_val=60;
std::ostringstream curr_val_str;
curr_val_str << "echo -n " << curr_val << " /file.txt";
system(curr_val_str.str().c_str());

答案 7 :(得分:1)

使用snprintf来避免安全问题。

答案 8 :(得分:0)

如何使用std::string&amp; std::to_string ...

std::string cmd("echo -n " + std::to_string(curr_val) + " > /file.txt");
std::system(cmd.data());