Tag: io

读取C中的二进制文件

假设使用此函数原型编写二进制文件(需要打开以进行读取): void writeBinaryFile ( char *fileName , char *comment , int numberOfDoubles , double *doubles , int numberOfInts , int *ints ) (有关此function的更多详细信息,请参见下面的粘贴) … 我的书面代码只获取.bin文件的第一个字母…… 这是我的function: void readBinaryFile(char *fileName) { FILE *fp; char *ptr; double *ptr1; int *ptr2; ptr=(char*)malloc(sizeof(char)*5); ptr1=(double*)malloc(sizeof(double)*6); ptr2=(int*)malloc(sizeof(int)*6); fp=fopen ( fileName , “rb” ) ; fread(ptr,sizeof(char),11,fp); while(*ptr!=’\0′) { printf(“%c”,*ptr); ptr++; } fclose(fp); […]

对包含从C中的文件输入的数字的字符串进行排序?

所以我正在研究一个程序,该程序从包含每个行/项目的“项目编号”,“单价”和“购买日期”的文件中读取行。 我已经达到了可以扫描文件并以所需的图表格式组织它的程度,但我无法弄清楚如何按“项目编号”对数据进行排序。 这是我的代码: #include #include int main() { FILE *fp; char ch; fp = fopen(“f.txt”, “r”); //open the file named f.txt if (fp == NULL) //In case we can’t find the file, notify the user printf(“File not found\n”); printf(“Item \t\tUnit Price\tPurchase Date\n”); //set up the header while ((ch = fgetc(fp)) != EOF) { //set the […]

XOR在一个非常大的文件上

我想XOR一个非常大的文件(~50 Go)。 更确切地说,我想通过使用密钥3847611839对明文文件的32个字节的每个块进行异或(因为内存不足)并创建(块后块)新的密码文件。 感谢您的任何帮助!!

C语言中putc()的宏实现

我在C中寻找putc()函数的宏实现。 我在Ritchie和Kernighan的“C编程语言”中找到的一个实现 #define putc(x,p) (–(p)->cnt >=0 \ ?(unsigned char) *(p)->ptr++ :_flushbuf((x),p)) 文件结构定义如下 typedef struct _iobuf { int cnt; char *ptr; char *base; int flag; int fd; }FILE; 当我们调用putc时,我无法看到cnt是如何初始化的?

在C中读取文件的最佳缓冲区大小

我必须使用read函数read C中的大文件。 我只是想知道在性能方面我们保留的缓冲区大小是否有所不同。 文件大小可能达到几十GB。

C程序将空间分隔的int的输入字符串转换为int数组

题: 我想创建一个C程序,它将一串空格分隔的int作为输入(正数和负数,可变数字位数),并将字符串转换为int数组。 从Stack Overflow上的字符串输入读取整数还有另一个问题,但它不适用于数字长度大于1或负数的数字。 尝试: #include int main () { int arr[1000], length = 0, c; while ((c = getchar()) != ‘\n’) { if (c != ‘ ‘) { arr[length++] = c – ‘0’; } } printf(“[“); for ( int i = 0; i < length-1; i++ ) { printf("%d,", arr[i]); } printf("%d]\n", arr[length-1]); } […]

getchar()和scanf中的输入缓冲区

很抱歉,因为我无法想到任何更好的标题我有一个问题处理输入这是我的测试代码,它将输入到字符串数组然后再次在屏幕上打印,非常简单 第一个测试代码正常工作 #include int main() { int i, index; char d, c[20]; scanf(“%d”, index); for(i=0; i<index; i++){ *(c+i) = getchar(); if (*(c+i)=='$') break; } printf("the string is %s", c); return 0; } 第二个测试代码,我确实使用了指针而不是c [i]而且程序没有运行。 这很奇怪,因为*(c + i)和c [i]是等价的 我变了 *(c+i) = getchar(); // (0) if (*(c+i)==’$’) 至 c[i] = getchar(); // (1) if (c[i]==’$’) 要么 […]

fseek到32位无符号偏移量

我正在读取一个文件格式(TIFF),它从文件的开头有32位无符号偏移量。 不幸的是fseek的原型,通常我会去特定的文件偏移,是: int fseek ( FILE * stream, long int offset, int origin ); 所以偏移是签名的。 我应该如何处理这种情况? 我应该使用不同的function进行搜索吗?

为什么读取数据块比在文件I / O中逐字节读取更快

我注意到,逐个读取文件比使用fread读取文件需要更多时间来读取整个文件。 根据cplusplus : size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); 从流中读取一个count元素数组,每个元素的大小都是字节size ,并将它们存储在ptr指定的内存块中。 Q1)因此,再次fread读取文件1个字节,所以它不是以1字节方法读取的方式吗? Q2)结果certificate,仍然可以花费更少的时间。 从这里 : 我使用大约44兆字节的文件作为输入运行它。 使用VC ++ 2012编译时,我得到以下结果: 使用getc计数:400000时间:2.034 使用fread数:400000时间:0.257 SO上的post也很少谈论它取决于操作系统。 Q3)操作系统的作用是什么? 为什么会如此以及幕后背后到底是什么?

可以从同一文件描述符的两个线程并行调用fwrite和fclose吗?

如果从同一文件描述符的两个线程并行调用fwrite和fclose会发生什么?