私は次のコードを持っています:
#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回繰り返します。いくつかの統計をグラファイトサーバーに送信することになっています。私はそれを使用して、グラファイトがどのように機能しているかを理解しています。私が見たところ、それは連結関数と関係がありますsprintf
(snprintf
これも同じように機能します)。
その行をコメントアウトすると、正しく機能し、必要な数(およびエポック)が生成されますが、必要な動的情報をグラファイトに送信できるようにするには、連結が必要です。
これらの連結関数がwhile関数を尊重しない理由を誰かが知っている場合は、私が本当に興味があるので知らせてください。また、私は他の提案を受け入れていますが、C言語があまり得意ではないため、ソケットを作成したり、ncやシステムを使用したりしないなど、深く掘り下げたくありません。