Tag: io

将9位值的流作为字节写入C中的文件

我有一个数组,其整数值从0-511(最多9位)。 我试图用fwrite写这个文件。 例如,使用数组: [257, 258, 259] Which is 100000001, 100000010, 100000011 I am trying to write 100000001100000010100000011 + extra padding of 0s to the file 但由于fwrite限制一次写入1个字节,我不知道该怎么做。 我是按位操作的新手,而不是如何分离各个字节。

如何在c中获取文件长度?

我只是有一个关于如何获取包含hex数字的文件长度的快速问题。 例如: 724627916C 我能想到的唯一方法是将hex值转换为二进制: 724627916C => 0111001001000110001001111001000101101100 然后计算二进制值的位数。 只是想知道这是否正确? 谢谢

为什么fread()停在一个0的字符串?

我正在尝试使用以下二进制配置读取二进制文件 00 00 00 1A 79 20 83 DB 44 … 使用以下function static BitArray getBitArray(string filename) { FILE *fs = fopen(filename.data(),”r”); fseek (fs , 0 , SEEK_END); unsigned long s = ftell (fs); rewind (fs); unsigned char *buffer = new unsigned char[s+1]; fread(buffer,1,s,fs); BitArray bArray; for(int i=0; i<s; i++) bArray.add(buffer[i]); delete[] buffer; fclose(fs); return bArray; […]

在C中写入文件的问题

我正在尝试将一些信息写入C中的文件,之前从未遇到过问题。 但是,现在在将变量的内容写入文件时似乎会中断。 这就是我所拥有的。 int i, count = 0; FILE *f; int _x, _y, _z, _x2, _y2, _z2; for (i = 0; i < HEIGHT * WIDTH*3; i+= 3) { if (buffer1[i/3] < MAGIC_VALUE) { count++; } if (buffer2[i/3] < MAGIC_VALUE) { count++; } } printf("Count = %d\n", count); // prints correctly… f = fopen("file.abc", "w"); […]

C中的getchar()完成而不按Enter键

从我之前的post中 ,我发现getchar()只有在按Enter键时才会完成。 我们考虑一下这段代码: #include main() { getchar(); getchar(); getchar(); getchar(); getchar(); } 我预计它会像这样运行:我按下某个键1然后按Enter键,然后按键2键,然后按键3键,然后按键4键,然后按键4键,输入键,最后按键5键,输入,程序应立即终止。 这不是实际发生的事情。 会发生什么:我按下某个键1然后按Enter键,然后键2输入,然后按键3和回车,程序最终终止! 为什么最后两个getchar()不起作用? 我观察到的另一个奇怪的事情是,如果我这样做:key1,key2,key3,key4 + Enter然后程序终止。 例如,如果我连续按q,w,e和r然后按Enter键,程序将终止。 为什么不是所有的getchar()都要求输入? 这是否意味着getchar()将任何其他键作为Enter? 但是下一个键是否被作为下一个getchar()的输入? 让我们考虑另一个代码: #include main() { int c=getchar(); int d=getchar(); int e=getchar(); printf(“2 getchar are remaining\n”); int f=getchar(); int g=getchar(); printf(” c is %d, d is %d, e is %d, f is %d and […]

了解内存分配的C代码示例

我是C的新手,我正在阅读K&R的“The C Programming Language”来学习它。 我对第2版第109页上出现的这个示例函数有疑问: /* readlines: read input lines */ int readlines(char *lineptr[], int maxlines) { int len, nlines; char *p, line[MAXLEN]; nlines = 0; while ((len = getline(line, MAXLEN)) > 0) if (nlines >= maxlines || p = alloc(len) == NULL) return -1; else { line[len-1] = ‘\0’; /* delete newline */ strcpy(p, […]

在大文件中搜索的最佳方法是什么?

我希望将KMP(或类似)搜索应用于大文件(> 4GB)。 我希望这会给我带来麻烦。我无法将它全部复制到内存中,因为那里没有足够的空间。 我的问题是,进行此搜索的最佳方法是什么? 我应该简单地创建一个FILE *并直接在文件中进行搜索,我应该将块(比如说4k)复制到内存中并搜索那些或者其他东西吗?

linux上使用rtkaio的aio_write有时很长

我在linux上使用async io和rtkaio库。 在我的测试中,一切都很完美,但是,在我的实际应用程序中,我看到aio_write应该返回非常快,非常慢。 将128KB写入O_DIRECT填充文件可能需要100多毫安。 我的测试和应用程序使用相同的I / O大小,我检查相同的文件系统(GFS)。 我添加了计数,我发现有大约50%的异步io操作是短的(短于2毫米)和50%的长(超过2毫米)。 我还检查了测试和应用程序都使用相同的rtkaio库。 我很丢失,任何想法我应该在哪里看? 另一个我的相关问题: / proc / sys / fs / aio-nr永远不会高于1024(Linux上的AIO)

关闭/清理“混合”文件描述符/套接字

当我使用accept()创建一个套接字并使用fdopen()从中创建一个FILE时,我需要做些什么来清理所有内容? 我需要在套接字上的FILE,shutdown()和close()上执行fclose(),还是只需要shutdown()和/或close()或fclose()? 如果我不做fclose(),我是否必须手动释放()FILE指针?

char *或char **可以伪装成FILE *吗?

在C中,我经常希望以相同的方式处理从文件读取的数据和从字符串数组中读取的数据。 通常从文件读取是用于生产,而字符串用于测试。 我最后写了很多像这样的代码: void handle_line(char *line, Things *things) { … } Things *read_from_chars(char *lines[]) { Things *things = Things_new(); for (int i = 0; lines[i] != NULL; i++) { handle_line(lines[i], things); } return things; } Things *read_from_input(FILE *input) { char *line = NULL; size_t linelen = 0; Things *things = Things_new(); while (getline(&line, &linelen, input) […]