簡體   English   中英

將參數傳遞給生成的進程在C中不起作用

[英]Passing arguments to a spawned process does not work in C

我需要將兩個地址(32位)傳遞給C的execl命令產生的進程,如下所示。 在第一個程序中:

  char buffer[18];
  sprintf (&buffer[0],"%x\0 %x\0",lock, count);
  arg_list[0]=&(buffer[0]);
  arg_list[1]=&(buffer[10]);
  execl ("/somedirectory/second_process", arg_list[0], arg_list[1], NULL);

然后在我的第二個程序中,我嘗試解析地址,如下所示:

  if (argc != 2) {
      printf ("PROCESS 2: Invalid number of arguments. Terminating %i\n", argc);
      return -1;
  }

 if ( !(sscanf (argv[1],"%x",&lock)) || !(sscanf (argv[2],"%x",&count)) ) {
      printf ("PROCESS 2: Problem with parameters passed in");
      return -1;

但是我的程序不斷給出錯誤,指出傳入的參數無效。 當我嘗試打印出收到的參數時,我的程序掛起。

 printf ("The arguments passsed in are %s %s", argv[1], argv[2]);

固定:

我錯誤地執行了execl調用。 應該是:

  execl ("/somedirectory/second_process", "second_process" arg_list[0], arg_list[1], NULL);

同樣在過程2中:

  if (argc != 3) {
      printf ("PROCESS 2: Invalid number of arguments. Terminating %i\n", argc);
      return -1;
  }

由於傳入的第一個參數應該是進程名稱,如Chris所建議的那樣。

謝謝!

數組總是基於C的0,因此您的兩個參數將分別為argv[0]argv[1] ,而argv[2]將為空指針,因此sscanf將失敗,崩潰或掛起。

現在, 通常您應該始終將程序名稱作為第一個( argv[0] )參數傳遞。 所以你要:

execl ("/somedirectory/second_process", "second_process", arg_list[0], arg_list[1], NULL);

也就是說,您實際上應該傳遞三個參數(因此在第二個程序中argc == 3 )。

在您的情況下, argc將為三個。 執行文件的名稱始終是第一個參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM