【发布时间】:2014-04-15 22:44:20
【问题描述】:
我正在开发一个 linux 程序,它应该解析从另一台计算机或互联网下载的文件,并从该文件中收集信息。程序还必须按例行程序重新下载文件,每隔 n 天/小时/分钟/无论如何,并再次解析它以保持更新,以防文件发生更改。
但是,解析文件的过程可能需要大量资源。因此,我想要一个函数来检查文件自上次下载以来是否已更改。我想像这样的例子:
int get_checksum(char *filename) {
// New prototype, if no such function already exists in standard C-libraries
int result; // Or char/float/whatever
// ...
return result;
}
int main(void) {
char filename[] = { "foo.dat" };
char file_url[] = { "http://example.com/foo.dat" }
int old_checksum; // Or char/float/whatever
int new_checksum; // Or char/float/whatever
// ...
// Now assume that old_checksum has a value from before:
dl_file(filename, file_url); // Some prototype for downloading the file
if ((new_checksum = get_checksum(filename)) == -1) {
// Badness
}
else {
if (new_checksum != old_checksum) {
old_checksum = new_checksum;
// Parse the file
}
else {
// Do nothing
}
}
// ...
}
Q1:标准 C/C++ 库中是否有 get_checksum(来自上例)这样的函数?
Q2:如果不是:达到这个目的最好的方法是什么?
不需要:
- 一个非常先进的功能
- 加密或安全校验和
- 能够将新文件与比上一个文件更旧的文件进行比较,因为新下载的文件总是会覆盖旧文件
【问题讨论】:
-
文件时间戳不能被信任吗?
-
@CareyGregory 下载新文件时时间戳不会改变吗?
-
我在想你可以在下载之前从源计算机获取时间戳。如果你能做到这一点,你甚至可以跳过下载。
-
为什么不只 fork 和 exec
sha1sum或md5sum?