Commande système c ++ linux

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