私は 'ping'の結果を書いて欲しい。私はファイルの先頭に文字列を書きたい。しかし、それは働かない。(c)
最初に、私はコマンドラインを書いてから、残りのping結果を書きます。
このようです。データの
ピング-C5 -W1 192.168.30.52
PING 192.168.30.52(192.168.30.52)56(84)バイト。 192.168.30.52から
64バイト:icmp_seq = 1個のTTL = 64時間= 0.368秒192.168.30.52から
64バイト:icmp_seq = 2 TTL = 64時間= 0.408秒
192.168.30.52から64バイト:icmp_seq = 3 TTL = 64時間= 0.400秒192.168.30.52から
64バイト= 4 TTL = 64時間icmp_seq = 0.392 MS 192.168.30.52から
64バイト:icmp_seq = 5 TTL = 64時間= 0.393秒
--- 192.168.30.52 ping statistics ---
5パケット送信、5受信、0%パケット損失、時間3996ms
rttmin/avg/max /この結果は
ある
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#define FILE_NAME "ping.txt"
#define doSystem system
void main(void) {
FILE *fp;
char cmdBuf[256], fileBuf[256], buffer[256];
char dst_addr[124] = "192.168.30.52";
struct in_addr ipaddr;
ssize_t read;
size_t len = 0;
if(!inet_aton(dst_addr, &ipaddr)) {
printf("invalid ip address\n");
} else {
sprintf(cmdBuf, "ping -c5 -W1 %s > %s", dst_addr, FILE_NAME);
fp = fopen(FILE_NAME, "a+");
fprintf(fp , "ping -c5 -W1 %s\n", dst_addr);
doSystem(cmdBuf);
fp = fopen(FILE_NAME, "r");
while(fgets(buffer, 255, (FILE*) fp)) {
printf("%s", buffer);
}
}
}
コマンドラインは、ファイルの終わりを書いている... MDEV = 0.368/0.392/0.408/0.018ミリ
が、このソース結果は..ですPING 192.168.30.52(192.168.30.52)56(84)バイトのデータ。 192.168.30.52から
64バイト:icmp_seq = 1個のTTL = 64時間= 0.368秒192.168.30.52から
64バイト:icmp_seq = 2 TTL = 64時間= 0.408秒
192.168.30.52から64バイト:icmp_seq = 3 TTL = 64時間= 0.400秒192.168.30.52から
64バイト= 4 TTL = 64時間icmp_seq = 0.392 MS 192.168.30.52から
64バイト:icmp_seq = 5 TTL = 64時間= 0.393秒
--- 192.168.30.52 ping statistics ---
5パケット送信、5受信、0%パケット損失、時間3996ms
rttmin/avg/max/MDEV = 0.368/0.392/0.408/0.018ミリ
ピング-C5 -W1 192.168.30.52
私はそれを修正することができますどのように?/?
新しいファイルを作成し、新しい行を最初に書き込んだ後、古いファイルの残りを追加します。最後にnewをoldに変更します。それは悪い考えです。ログファイルは常に書き換えられますが、書き換えられません。 – Olaf
"doSystem"を呼び出す直前にfcloseを追加してみてください。 – Jay
一時ファイルを作成し、そのファイルにすべての最新のping結果を書き込み、古いファイルデータを一時ファイルに追加して古いファイルを削除し、一時ファイル名を古いファイル名に変更します。 –