-5

私は次のコードを持っています:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
  time_t result;
  char   hostname[10] = "ws45new";
  char   graphite[10] = "127.0.0.1";
  char   buf[1024];
  int    n = 0;
  int    num = 0;
  int    graphiteport = 2003;

  while (1 == 1)
  {
    result = time(NULL);
    n = n + 1;
    if (n >= 100)
      n = 0;
    printf("\n %d", n);
    // snprintf(buf, sizeof(buf), "echo \"stats.ws45new.test %d %d \" | nc 127.0.0.1 2003", n, result);
    num = sprintf(buf, "echo \"stats.ws45new1.test %d %d \" | nc 127.0.0.1 2003", n, result);
    system(buf);
    printf("\n %s", buf);
    sleep(2);
  }
  return 0;
}

これは、テスト専用ののこぎり波信号のようなものを生成することになっています。私の問題は、プログラムを実行しても何も実行されないことです。

Ctrl-Cを押して停止すると、プログラムはwhileループを1回繰り返します。いくつかの統計をグラファイトサーバーに送信することになっています。私はそれを使用して、グラファイトがどのように機能しているかを理解しています。私が見たところ、それは連結関数と関係がありますsprintfsnprintfこれも同じように機能します)。

その行をコメントアウトすると、正しく機能し、必要な数(およびエポック)が生成されますが、必要な動的情報をグラファイトに送信できるようにするには、連結が必要です。

これらの連結関数がwhile関数を尊重しない理由を誰かが知っている場合は、私が本当に興味があるので知らせてください。また、私は他の提案を受け入れていますが、C言語があまり得意ではないため、ソケットを作成したり、ncやシステムを使用したりしないなど、深く掘り下げたくありません。

4

1 に答える 1

2

プログラムは、システム コールでスタックする可能性が最も高いです。

末尾の改行なしでテキストを印刷しているため、呼び出し後に行う改行が印刷されるまで、テキストはバッファーに保持されますsystem

于 2012-08-28T10:23:49.107 に答える