fcamuso

Untitled

Jul 28th, 2026
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.98 KB | None | 0 0
  1. //VERSIONE WINDOWS (A SEGUIRE TROVATE LA VERSIONE PER LINUX)
  2. import std;
  3. #include <windows.h>
  4.  
  5. auto main() -> int
  6. {
  7.  
  8.     STARTUPINFO si{ .cb = sizeof(STARTUPINFO) }; // oppure si.cb = ...
  9.     PROCESS_INFORMATION pi{};
  10.  
  11.  
  12.     // tentiamo di creare un processo che esegua il blocco note
  13.     //LINK alla documentazione della funzione: https://msdn.microsoft.com/en-us/library/ms682425(v=vs.85).aspx
  14.  
  15.     // CreateProcess richiede un wchar_t modificabile
  16.     wchar_t cmd[] { L"notepad.exe" };
  17.  
  18.     if (!CreateProcess(
  19.         NULL,
  20.         cmd,          
  21.         NULL,
  22.         NULL,
  23.         FALSE,
  24.         0,
  25.         NULL,
  26.         NULL,
  27.         &si,
  28.         &pi)
  29.         )
  30.     {
  31.         std::println("CreateProcess ha fallito. errore: {}", GetLastError());
  32.         return 2;
  33.     }
  34.  
  35.     std::println("Blocco note lanciato. In attesa della sua terminazione ...");
  36.     // Metti in attesa il processo di esecuzione di questo programma
  37.     // fino al completamento di quello creato (chiusura del blocco note)
  38.     WaitForSingleObject(pi.hProcess, INFINITE);
  39.  
  40.     // Rilasciamo le risorse attivate per la creazione
  41.     CloseHandle(pi.hProcess);
  42.     CloseHandle(pi.hThread);
  43.  
  44.     std::println("Il controllo e` tornato al processo principale!");
  45.     return 0;
  46. }
  47. ------------------------------------------------------------------------------------------------------------------------
  48.  
  49. //VERSIONE LINUX
  50. #include <iostream>
  51. #include <spawn.h>
  52. #include <sys/wait.h>
  53. #include <cerrno>
  54. #include <cstring>
  55.  
  56. // Espone le variabili d'ambiente correnti da passare al nuovo processo
  57. extern char **environ;
  58.  
  59. int main()
  60. {
  61.     pid_t pid; // L'equivalente del pi.hProcess (identificativo del processo)
  62.  
  63.     // Gli argomenti del comando. Il primo elemento รจ sempre il nome del programma stesso.
  64.     char* argv[] = { (char*)"nano", NULL };
  65.  
  66.     // posix_spawnp cerca e lancia l'eseguibile incapsulando fork() ed exec() in una sola chiamata
  67.     int status = posix_spawnp(
  68.         &pid,           // Output: riceve il PID del nuovo processo
  69.         "nano",         // Nome dell'eseguibile da cercare nel PATH
  70.         NULL,           // Azioni sui file (es. ridirezione I/O) - NULL per default
  71.         NULL,           // Attributi del processo (es. scheduling) - NULL per default
  72.         argv,           // Argomenti da linea di comando
  73.         environ         // Variabili d'ambiente ereditate
  74.     );
  75.  
  76.     if (status != 0)
  77.     {
  78.         std::cout << "posix_spawn ha fallito. errore: " << status
  79.                   << " (" << strerror(status) << ")" << std::endl;
  80.         return 2;
  81.     }
  82.  
  83.     std::cout << "Editor lanciato (PID: " << pid << "). In attesa della sua terminazione ..." << std::endl;
  84.  
  85.     // Mette in attesa il processo di esecuzione di questo programma
  86.     // Equivalente a WaitForSingleObject(pi.hProcess, INFINITE);
  87.     int wait_status;
  88.     waitpid(pid, &wait_status, 0);
  89.  
  90.     std::cout << "Il controllo e` tornato al processo principale!" << std::endl;
  91.  
  92.     return 0;
  93. }
  94.  
Advertisement
Add Comment
Please, Sign In to add comment