Tag: file io

二进制与文本模式下的文件操作 – 性能问题

在许多项目中,我看到数据对象/结构以二进制模式写入文件,然后再次以二进制模式从文件中检索它们。 我想知道为什么他们在二进制模式下这样做? 文本和二进制模式之间的任何性能差异? 如果没有,那么何时使用二进制模式或文本模式?

C:只读取文件的最后一行。 没有循环

使用C,有没有办法只读取文件的最后一行而不循环它的整个内容? 事情是该文件包含数百万行,每行包含一个整数(long long int)。 文件本身可能非常大,我估计甚至高达1000mb。 我确信最后一行不会超过55位数,但也可能只有2位数。 使用任何类型的数据库都没有选择……我已经考虑过了。 也许这是一个愚蠢的问题,但是来自PHP背景我觉得很难回答。 我到处看,但一无所获。 目前我正在使用: if ((fd = fopen(filename, “r”)) != NULL) // open file { fseek(fd, 0, SEEK_SET); // make sure start from 0 while(!feof(fd)) { memset(buff, 0x00, buff_len); // clean buffer fscanf(fd, “%[^\n]\n”, buff); // read file *prefer using fscanf } printf(“Last Line :: %d\n”, atoi(buff)); // for […]

select()如何等待常规文件描述符(非套接字)?

这是来自“man select”的代码示例加上几行来读取正在写入的实际文件。 我怀疑当写入./myfile.txt时, select会返回它现在可以从该fd读取的内容。 但是,只要txt文件存在,select就会在while循环中不断返回。 我希望它只在新数据写入文件末尾时返回。 我认为这应该是如何运作的。 #include #include #include #include #include #include int main(void) { fd_set rfds; struct timeval tv; int retval; int fd_file = open(“/home/myfile.txt”, O_RDONLY); /* Watch stdin (fd 0) to see when it has input. */ FD_ZERO(&rfds); FD_SET(0, &rfds); FD_SET(fd_file, &rfds); /* Wait up to five seconds. */ tv.tv_sec = 5; […]

如何使用scanf \ fscanf读取一行并解析为变量?

我正在尝试在每一行中读取使用以下格式构建的文本文件: 字符*,字符*,诠释 即: AAAAA,dfdsd,23 bbbasdaa,DDD,100 我想使用fscanf从文件中读取一行,并自动将该行解析为varilables string1,string2,intA 这样做的正确方法是什么? 谢谢

Windows系统中是否有未缓冲的I / O?

我想找到低级C / C ++ API,相当于linux系统中的“write”,没有缓冲区。 有吗? 缓存的I / O如fread,fwrite不是我想要的。

为什么C的“fopen”将“const char *”作为第二个参数?

它总是让我感到奇怪,C函数“fopen”将“const char *”作为第二个参数。 我认为如果在stdio.h中定义了位掩码,比如“IO_READ”等,那么读取代码和实现库代码会更容易,所以你可以这样做: FILE* myFile = fopen(“file.txt”, IO_READ | IO_WRITE); 它的实际存在方式是否存在程序化原因,还是仅仅是历史性的? (即“这就是它的方式。”)

使用mmap将文件读取到字符串

我正在尝试使用mmap将文件读取到字符串。 我跟随这个例子: http : //www.lemoda.net/c/mmap-example/index.html 我的代码看起来像这样 unsigned char *f; int size; int main(int argc, char const *argv[]) { struct stat s; const char * file_name = argv[1]; int fd = open (argv[1], O_RDONLY); /* Get the size of the file. */ int status = fstat (fd, & s); size = s.st_size; f = (char *) […]

读取文件为字节数组

我有一个编码霍夫曼算法的任务。 我把整个问题整理在脑海中,但我在文件处理方面遇到了一些麻烦。 问题是:算法应该压缩任何类型的文件。 我的解决方案:将文件读取为字节数组,然后对每个字节使用int array[256]={0} ,得到它对应的值并增加array[n] 。 如果我没说清楚,请告诉我。 所以,我做了很多研究,但不明白如何从任何类型的文件中获取字节以及如何处理它们。

c中的链接列表(从文件中读取)

我对C编程很新,我遇到了一些困难。 我正在尝试从行读取行到文本文件,然后将每行添加到一个简单的链接列表。 我已经尝试了很多,但我还没有找到解决方案。 到目前为止,在我的代码中,我能够从文件中读取,但我无法理解如何保存行的文本行并将其添加到链接列表中。 这是我到目前为止: struct list { char string; struct list *next; }; typedef struct list LIST; int main(void) { FILE *fp; char tmp[100]; LIST *current, *head; char c; int i = 0; current = NULL; head = NULL; fp = fopen(“test.txt”, “r”); if (fp == NULL) { printf(“Error while opening file.\n”); exit(EXIT_FAILURE); } […]

`fseek`,`lseek`,`seekg`,`seekp`之间有什么区别?

面试官问我,我将如何实现tail (是的,linux shell中的那个)。 我的回答是,首先寻找文件的末尾,然后逐个读取字符,如果遇到\n ,则表示一行已关闭,等等等等。 我认为我的答案是正确的。 然后我发现了这个问题,我应该用它来实现tail吗? 我以为我可以简单地使用seekg (C ++的东西?),但有人告诉我应该使用lseek (linux系统调用?)。 那么包括fseek (ANSI C的东西?),我应该用它来实现tail ? 他们之间有什么大不同吗?