0
char cmd[256];
memset(cmd,0,256);
sprintf(cmd, "cp %s %s", "test1.txt", "test2.txt");
system(cmd);
printf("cmd completed\n");

上記のコードを実行すると、アプリケーションがシステム コールでハングします。printf 行にたどり着きません。GCC コンパイラを使用して Linux Centos で実行しています。

どんな助けでも大歓迎です。

上記のコードを別のアプリケーションで実行した場合 (コピーをメインに貼り付けます)。それはうまくいきます。

4

1 に答える 1

7

完全なプログラムとして、以下のコードはほとんどの条件下で問題なく動作します。

ハングさせる唯一の方法は、ハングtest1.txtを引き起こす特別なファイルの種類である場合ですcp。たとえば、mkfifo test1.txt面白い結果が得られます。そして面白い結果は、CTRL + C、kill などでプログラムを強制終了する必要があることを意味します。

あなたの問題は、投稿したコードにはない可能性が最も高いです。

/* copy.c, 
   compile using the command "gcc -o copy copy.c"
   run using "./copy"
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define CMD_SIZE 256
char cmd[CMD_SIZE];

int main(int argc, char **argv)
{
  memset( cmd, 0, CMD_SIZE );
  sprintf( cmd, "cp %s %s", "test1.txt", "test2.txt" );
  system(cmd);
  printf("cmd complete\n");
}

健全性チェックとして、printf("%d\n", BUFSIZE)の値をチェックし、コマンドが実際に意図したとおりに見えることを確認するために、追加をBUFSIZE試みるprintf("%s\n", cmd)ことができます。

于 2012-04-12T19:58:14.147 に答える