2011-06-28 125 views
7

我有以下问题:C++ linux系统命令

我在程序中使用此功能:

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 /亮度。我不能用fprintf写。我不知道为什么。

+0

你会发现很多问题试图写多语言的源文件是什么。我建议你坚持只使用C或C++中的一种。 – pmg

回答

9

你不能连接字符串,就像你正在做的那样。试试这个:

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

对于使用'snprintf'而不是'sprintf'来说,这值得使用+1。 –

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); 

​​

8

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

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

首先确保命令是足够大的。你的情况

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); 
2

正确的方法与此类似:

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

} 
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()); 
0

有关使用std::string & std::to_string ...

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