J’ai le problème suivant:
J’utilise dans mon programme cette fonction:
system("echo -n 60 > /file.txt");
ça fonctionne bien.
Mais je ne veux pas avoir de valeur constante. Je le fais:
curr_val=60; char curr_val_str[4]; sprintf(curr_val_str,"%d",curr_val); system("echo -n curr_val_str > /file.txt");
Je vérifie ma chaîne:
printf("\n%s\n",curr_val_str);
Oui c’est vrai. mais le system
dans ce cas ne fonctionne pas et ne renvoie pas -1. Je viens d’imprimer la chaîne!
Comment puis-je transférer une variable comme un entier qui sera imprimé dans un fichier comme un nombre entier, mais ne sera pas enchaîné?
Donc, je veux avoir la variable int a et je veux imprimer la valeur d’une fonction système avec le fichier. Un véritable chemin d’access à mon fichier.txt est / proc / acpi / video / NVID / LCD / luminosité. Je ne peux pas écrire avec fprintf. Je ne sais pas pourquoi.
vous ne pouvez pas concaténer des chaînes comme vous essayez de le faire. Essaye ça:
curr_val=60; char command[256]; snprintf(command, 256, "echo -n %d > /file.txt", curr_val); system(command);
La fonction system
prend une chaîne. Dans votre cas, il utilise le texte * curr_val_str * plutôt que le contenu de cette variable. Plutôt que d’utiliser sprintf
pour générer le numéro, utilisez-le pour générer la commande système complète dont vous avez besoin, c.-à-d.
sprintf(command, "echo -n %d > /file.txt", curr_val);
d’abord s’assurer que la commande est assez grande.
La commande qui est exécutée (à tort) dans votre cas est la suivante:
"echo -n curr_val_str > /file.txt"
Au lieu de cela, vous devriez faire:
char full_command[256]; sprintf(full_command,"echo -n %d > /file.txt",curr_val); system(full_command);
#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 );
homme snprintf
La manière correcte serait semblable à ceci:
curr_val=60; char curr_val_str[256]; sprintf(curr_val_str,"echo -n %d> /file.txt",curr_val); system(curr_val_str);
Juste NE PAS. 🙂
Pourquoi recourir au system()
pour une opération aussi simple?
#include #include #include #include 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); }
Avez-vous pensé à utiliser la fonctionnalité iostreams de C ++ au lieu de faire echo
? Par exemple (non compilé):
std::ostream str("/file.txt"); str << curr_val << std::flush;
Alternativement, la commande que vous transmettez au system
doit être entièrement formatée. Quelque chose comme ça:
curr_val=60; std::ossortingngstream curr_val_str; curr_val_str << "echo -n " << curr_val << " /file.txt"; system(curr_val_str.str().c_str());
Utilisez snprintf
pour éviter les problèmes de sécurité.
Qu’en est-il de l’utilisation de std::ssortingng
& std::to_ssortingng
…
std::ssortingng cmd("echo -n " + std::to_ssortingng(curr_val) + " > /file.txt"); std::system(cmd.data());