i want write string to top of the file . but it dosen't work.(in c)
我想写'ping'的结果。
首先,我编写命令行,然后..编写其余的ping结果。
像这样。
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 time = 0.368 ms
来自192.168.30.52的64字节:icmp_seq = 2 ttl = 64时间= 0.408 ms
来自192.168.30.52的64字节:icmp_seq = 3 ttl = 64时间= 0.400毫秒
来自192.168.30.52的64字节:icmp_seq = 4 ttl = 64时间= 0.392 ms
来自192.168.30.52的64字节:icmp_seq = 5 ttl = 64时间= 0.393毫秒
--- 192.168.30.52 ping统计---
传输5个包,5个接收,0%丢包,时间3996ms
rtt min / avg / max / mdev = 0.368 / 0.392 / 0.408 / 0.018 ms
但是这个源结果是...命令行写的是文件的结尾..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <stdio.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include #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 "); } else { sprintf(cmdBuf,"ping -c5 -W1 %s > %s", dst_addr, FILE_NAME ); fp = fopen(FILE_NAME,"a+"); fprintf(fp ,"ping -c5 -W1 %s ", 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)字节的数据。
来自192.168.30.52的64字节:icmp_seq = 1 ttl = 64 time = 0.368 ms
来自192.168.30.52的64字节:icmp_seq = 2 ttl = 64时间= 0.408 ms
来自192.168.30.52的64字节:icmp_seq = 3 ttl = 64时间= 0.400毫秒
来自192.168.30.52的64字节:icmp_seq = 4 ttl = 64时间= 0.392 ms
来自192.168.30.52的64字节:icmp_seq = 5 ttl = 64时间= 0.393毫秒
--- 192.168.30.52 ping统计---
传输5个包,5个接收,0%丢包,时间3996ms
rtt min / avg / max / mdev = 0.368 / 0.392 / 0.408 / 0.018 ms
ping -c5 -W1 192.168.30.52
我该怎么办呢?/?
输出到文件是完全缓冲的。 在执行命令之前,需要刷新缓冲区。
1 2 3 4 5 6 |
1 2 3 4 5 6 |
我喜欢这样。
有用 !
感谢所有评论!
在sprintf中,>替换文件内容(与"w"模式相同)。 使用>>与"a"模式相同。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <stdio.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include #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.0.6"; struct in_addr ipaddr; ssize_t read; size_t len = 0; if( !inet_aton(dst_addr, &ipaddr) ) { printf("invalid ip address "); } else { sprintf(cmdBuf,"ping -c5 -W1 %s >> %s", dst_addr, FILE_NAME ); fp = fopen(FILE_NAME,"a+"); fprintf(fp ,"ping -c5 -W1 %s ", dst_addr); fclose(fp); doSystem(cmdBuf); } } |