我想寫'結果'的結果。我想要寫入字符串頂部的文件。但它不工作(在c)
首先,我寫命令行,然後...寫其餘的ping結果。
這樣子。
平-C5 -W1 192.168.30.52
PING 192.168.30.52(192.168.30.52)56(84)個數據字節。
64字節從192.168.30.52: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個字節:icmp_seq = 4 TTL = 64時間= 0.392毫秒從192.168.30.52
64字節:icmp_seq = 5 TTL = 64時間= 0.393毫秒
--- 192.168.30.52 ping statistics ---
發送5個數據包,發送5個數據包,發送0%數據包丟失數據,時間3996ms
rtt min/avg/max/MDEV = 0.368/0.392/0.408/0.018毫秒
但這源結果是...命令行寫的文件的末尾..
#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);
}
}
}
這個結果是
PING 192.168.30.52(192.168.30.52)56(84)字節的數據。
64字節從192.168.30.52: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個字節:icmp_seq = 4 TTL = 64時間= 0.392毫秒從192.168.30.52
64字節:icmp_seq = 5 TTL = 64時間= 0.393毫秒
--- 192.168.30.52 ping statistics ---
發送5個數據包,發送5個數據包,發送0%數據包丟失數據,時間3996ms
rtt min/avg/max/MDEV = 0.368/0.392/0.408/0.018毫秒
平-C5 -W1 192.168.30.52
如何解決它??? /?
通過創建一個新文件,首先寫入新行,然後附加其餘的舊文件。最後重新命名爲舊的。說:這是一個壞主意;日誌文件總是附加的,而不是重寫。 – Olaf
在你打電話給「doSystem」之前嘗試添加一個fclose。 – Jay
創建臨時文件並將所有最新的ping結果寫入該文件,然後將舊文件數據附加到臨時文件,然後刪除舊文件並將臨時文件名重命名爲舊文件名。 –