我想将字符串写入文件顶部。但它不起作用。(在 c 中)
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 time=0.408 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=3 ttl=64 time=0.400 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=4 ttl=64 time=0.392 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=5 ttl=64 time=0.393 ms
--- 192.168.30.52 ping统计---
发送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) 字节数据。
来自 192.168.30.52 的 64 个字节:icmp_seq=1 ttl=64 time=0.368 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=2 ttl=64 time=0.408 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=3 ttl=64 time=0.400 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=4 ttl=64 time=0.392 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=5 ttl=64 time=0.393 ms
--- 192.168.30.52 ping统计---
发送5包,接收5包,丢包0%,耗时3996ms
rtt min/avg/max/mdev = 0.368/0.392/0.408/0.018 毫秒
ping -c5 -W1 192.168.30.52
我该如何解决???/?
sprintf(cmdBuf, "ping -c5 -W1 %s >> %s", dst_addr, FILE_NAME );
fp = fopen(FILE_NAME, "w");
fprintf(fp , "ping -c5 -W1 %s\n", dst_addr);
fclose(fp);
doSystem(cmdBuf);
我喜欢这样。
有效!
感谢大家的评论!
文件输出已完全缓冲。您需要在执行命令之前刷新缓冲区。
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);
fflush(fp);
doSystem(cmdBuf);
在 sprintf 中,> 替换文件内容(与 "w" 模式相同)。 >> 的使用与 "a" 模式相同。
#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.0.6";
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);
fclose(fp);
doSystem(cmdBuf);
}
}
我想要 '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 time=0.408 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=3 ttl=64 time=0.400 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=4 ttl=64 time=0.392 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=5 ttl=64 time=0.393 ms
--- 192.168.30.52 ping统计---
发送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) 字节数据。
来自 192.168.30.52 的 64 个字节:icmp_seq=1 ttl=64 time=0.368 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=2 ttl=64 time=0.408 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=3 ttl=64 time=0.400 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=4 ttl=64 time=0.392 ms
来自 192.168.30.52 的 64 个字节:icmp_seq=5 ttl=64 time=0.393 ms
--- 192.168.30.52 ping统计---
发送5包,接收5包,丢包0%,耗时3996ms
rtt min/avg/max/mdev = 0.368/0.392/0.408/0.018 毫秒
ping -c5 -W1 192.168.30.52
我该如何解决???/?
sprintf(cmdBuf, "ping -c5 -W1 %s >> %s", dst_addr, FILE_NAME );
fp = fopen(FILE_NAME, "w");
fprintf(fp , "ping -c5 -W1 %s\n", dst_addr);
fclose(fp);
doSystem(cmdBuf);
我喜欢这样。
有效!
感谢大家的评论!
文件输出已完全缓冲。您需要在执行命令之前刷新缓冲区。
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);
fflush(fp);
doSystem(cmdBuf);
在 sprintf 中,> 替换文件内容(与 "w" 模式相同)。 >> 的使用与 "a" 模式相同。
#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.0.6";
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);
fclose(fp);
doSystem(cmdBuf);
}
}