我正在读取一个不断增长的输入文件,然后做一些工作并将信息写入输出文件。我有一些条件来处理不断增长的文件。但我在退出循环方面失败了。
FILE *logfile;
int main(int argc, char *argv[])
{
char *filename;
char *logfilename;
FILE *infile;
char line_buf[255];
char *line;
sleep(3);
if (argc < 3) {
fprintf(stderr, "Usage: %s <filename> <logfile>\n",
argv[0]);
return -1;
}
filename = argv[1];
logfilename = argv[2];
infile = fopen(filename, "rb");
if (infile == NULL) {
fprintf(stderr, "Failed to open file\n");
return -1;
}
logfile = fopen(logfilename, "w");
if (logfile == NULL) {
fprintf(stderr, "Failed to open logfile - are permissions correct?\n");
return -1;
}
while(1){
line = fgets(line_buf, sizeof(line_buf), infile);
if (line == NULL){
if(feof(infile))
clearerr(infile);
failedReads++;
usleep(25000); //wait for the data from live file
continue;
}
else{
if(feof(infile))
break;
}
...........
//do some work
...........
}
fclose(infile);
fclose(logfile);
}
我的输出日志文件仅在输入文件停止增长(即在执行结束时)后才获取数据。我希望我的输出日志文件按时间获取数据(表示输出文件没有增长)。我有一个python脚本来创建一个不断增长的文件(如果有人真的想解决我的问题)。
#/usr/bin/python
import time
with open("input.txt") as f:
fileoutput = f.readlines()
with open("out.txt", "a+") as f1:
for line in fileoutput:
f1.write(line)
f1.flush()
time.sleep(0.01)
代码正在无限期地等待其他数据。使用usleep(25000*failedReads)
,代码等待的时间越来越长。
// Ineffective code
if (line == NULL){
if(feof(infile))
clearerr(infile);
failedReads++;
usleep(25000*failedReads); //wait for the data from live file
continue;
}
else{
if(line == NULL) // this can never be true!
if(feof(infile))
break;
}
"to get the data by time(表示输出文件没有增长)"意味着应该有一个时间上限,如果输入文件不能提供更多的数据,则退出循环。
查找连续两次读取失败。如果第一次失败后等待无法提供更多数据,则需要时间离开。
// instead
bool failed_read_flag = false;
while(1){
line = fgets(line_buf, sizeof(line_buf), infile);
if (line == NULL){
if (failed_read_flag) {
break; // 2 successive read fails
}
if(!feof(infile)) {
break; // Rare input error just occurred.
}
clearerr(infile);
failed_read_flag = true;
usleep(25000 /* us */); //wait for the data from live file
continue;
}
failed_read_flag = false;
// Do some work
}
用infile=fopen(filename,"rb");
打开一个文件,然后将其与fget()
一起使用,这很奇怪。
如果文件是文本文件,请使用fopen(filename,"r")
。如果文件是二进制的,使用fread()
。
问题内容: 假设您有一个用于处理某种XML文件或配置文件的库。该库将整个文件读入内存,并提供用于编辑内容的方法。处理完内容后,可以调用将内容保存回文件。问题是如何以安全的方式执行此操作。 覆盖现有文件(开始写入原始文件)显然是不安全的。如果该方法在完成之前失败,则最终将写入一半的文件,并且您丢失了数据。 更好的选择是在某个位置写入 临时 文件,方法完成后, 将 临时文件 复制 到原始文件。 现在,
我整晚都在做这个,但是什么也没做出来。我希望我的代码对用户输入的所有数字求和,计算用户输入数字的次数。然后计算平均值。然后找到最大值和最小值,很容易就对了。是的,如果我被允许使用数组,但这是为了复习,我讨厌while循环。 这是我的密码。 以下是输出结果: 请输入一个整数:3您的数字之和为:3.0输入的值数为:1 请输入一个整数:2数字之和为:5.0输入的数值个数为:2 请输入一个整数:1数字之和
问题内容: 我发现几乎每个教程都告诉我针对事件循环执行此操作: 但是,单击X关闭程序会出现此消息。 这些示例建议使用无限循环,这的确使我感到奇怪。这听起来不自然,而我的其他X11程序也没有这样做。所以我四处搜寻。我发现了如何捕获窗口关闭事件。 那个有效。它退出没有错误。…但是我拒绝相信这是正常的做事方式。我的意思是,这是正确退出X11应用程序的唯一方法吗?捕获结束事件似乎需要做很多工作。如何进行“
问题内容: 我的redis rdb文件的大小一直在增长,直到数据库无法运行并且连接被拒绝为止。我意识到这与某些配置设置有关-我使用的是默认配置文件。 有什么办法可以防止这种情况?我不必担心持续备份。 问题答案: 这显然在redis.conf中, 上面的文本在redis.conf中,如果您不想保存rdb文件,请在保存的三行注释,例如
如果输入了非int值,如何创建一个会中断的while循环? 例如,如果用户输入字符串、double或int以外的其他基本类型,循环将退出。
我有以下代码来下载通过TCP传输的文件: 一旦所有的字节都被处理了(它们总是被处理的,它像正常的一样工作,只是不退出循环),文件就被创建了,没有一个问题,但是,循环没有退出。