Tag: io

C中的I / O更快

我有一个问题,将从控制台采取1000000行输入,如下所示。 0 1 23 4 5 1 3 5 2 56 12 2 3 33 5 … … 我使用过scanf,但它非常慢。 无论如何以更快的方式从控制台获取输入? 我可以使用read(),但我不确定每行中的字节数,所以我不能读取()来读取’n’字节。 谢谢,非常有责任

将2d数组写入C中的文件

我曾经使用下面的代码将1D数组写入文件: FILE *fp; float floatValue[5] = { 1.1F, 2.2F, 3.3F, 4.4F, 5.5F }; int i; if((fp=fopen(“test”, “wb”))==NULL) { printf(“Cannot open file.\n”); } if(fwrite(floatValue, sizeof(float), 5, fp) != 5) printf(“File write error.”); fclose(fp); /* read the values */ if((fp=fopen(“test”, “rb”))==NULL) { printf(“Cannot open file.\n”); } if(fread(floatValue, sizeof(float), 5, fp) != 5) { if(feof(fp)) printf(“Premature end of […]

从stdin读取写入C中的stdout

我正在尝试编写一个猫克隆来练习C,我有这个代码: #include #define BLOCK_SIZE 512 int main(int argc, const char *argv[]) { if (argc == 1) { // copy stdin to stdout char buffer[BLOCK_SIZE]; while(!feof(stdin)) { size_t bytes = fread(buffer, BLOCK_SIZE, sizeof(char),stdin); fwrite(buffer, bytes, sizeof(char),stdout); } } else printf(“Not implemented.\n”); return 0; } 我试着echo “1..2..3..” | ./cat echo “1..2..3..” | ./cat和./cat < garbage.txt但我在终端上看不到任何输出。 我在这做错了什么? 编辑:根据评论和答案,我最终这样做: […]

优化磁盘IO

我有一段代码可以分析来自非常大(10-100GB)二进制文件的数据流。 它运行良好,所以是时候开始优化了,目前磁盘IO是最大的瓶颈。 有两种类型的文件正在使用中。 第一种类型的文件由16位整数流组成,必须在I / O之后进行缩放,以转换为物理上有意义的浮点值。 我以块的forms读取文件,并通过一次读取一个16位代码,执行所需的缩放,然后将结果存储在数组中来读取数据块。 代码如下: int64_t read_current_chimera(FILE *input, double *current, int64_t position, int64_t length, chimera *daqsetup) { int64_t test; uint16_t iv; int64_t i; int64_t read = 0; if (fseeko64(input, (off64_t)position * sizeof(uint16_t), SEEK_SET)) { return 0; } for (i = 0; i < length; i++) { test = fread(&iv, sizeof(uint16_t), 1, input); […]

一次读取一个二进制文件1个字节

我试图一次读取一个C 1字节的二进制文件,并在搜索互联网几个小时后仍然无法检索除垃圾和/或seg故障之外的任何内容。 基本上,二进制文件的格式为256项长度,每个项目为1个字节(0到255之间的无符号整数)。 我试图使用fseek和fread跳转到二进制文件中的“索引”并检索该值。 我目前的代码: unsigned int buffer; int index = 3; // any index value size_t indexOffset = 256 * index; fseek(file, indexOffset, SEEK_SET); fread(&buffer, 256, 1, file); printf(“%d\n”, buffer); 现在这段代码给了我随机垃圾数和段错误。 有关如何使其正常工作的任何提示?

好的C字符串库

我最近受到启发,启动了一个我想要编写一段时间的项目。 我想在C中做,因为内存处理是这个应用程序的关键。 我正在四处寻找C中字符串的良好实现,因为我知道我自己这样做会导致一些混乱的缓冲区溢出,我希望处理相当多的字符串。 我发现这篇文章详细介绍了每一个,但他们每个人都觉得他们有很多利弊(不要误会我的意思,这篇文章非常有帮助,但它仍然让我担心,即使我是选择其中之一,我不会使用我能得到的最好的)。 我也不知道这篇文章是如何更新的,因此我目前的请求。 我正在寻找的是可以容纳大量字符的东西,并简化了搜索字符串的过程。 如果它允许我以任何方式标记字符串,甚至更好。 此外,它应该有一些非常好的I / O性能。 打印和格式化打印不是最重要的。 我知道我不应该期望一个库能为我做所有的工作,但如果有一个记录良好的字符串函数可以节省我一些时间和一些工作,只是徘徊。 任何帮助是极大的赞赏。 提前致谢! 编辑:我被问及我喜欢的许可证。 任何类型的开源许可都可以,但最好是GPL(v2或v3)。 EDIt2:我找到了betterString(bstring)库,它看起来很不错。 良好的文档,小而多function的function,并且易于与c字符串混合。 有没有关于它的好故事? 我读到的唯一缺点是它缺乏Unicode(再次,读到这个,还没有看到它面对面),但其他一切似乎都很好。 EDIT3:另外,最好是纯C.

如何打开不在同一文件夹中的文本文件?

由于C它不是我习惯编程的语言,我不知道该怎么做。 我有一个项目文件夹,其中包含所有.c和.h文件以及一个conf文件夹,其中有一个config.txt文件可供阅读。 我怎么能打开它? FILE* fp = fopen(“/conf/config.txt”, “r”); if (fp != NULL) { //do stuff } else printf(“couldn’t open file\n”); 我一直收到错误消息。 为什么? 顺便说一句,这只需要在Windows上工作,而不是linux。 谢谢。

fprintf()函数无法将数据持久保存到文件中; 必须跟着fflush()函数?

我正在使用fopen()函数打开一个文件来写,并返回一个FILE指针。 然后我用fprintf()使用这个指针,但是数据不会保留我对文件的写入。 这与Direct IO / O_DIRECT有关,还是有什么问题?

程序正在跳过fgets而不允许输入

基本上如标题所示..当我的程序从控制台运行时,它会询问你是否要加密或解密..当我输入e或E时,它会创建一个新的空行(直到我输入一些那种文字),然后一次显示“输入文字”和“输入密钥”行。 因此,在控制台中它看起来像: 你想(E)ncrypt还是(D)ecrypt? Ë asdf jkl; <—-随机用户输入以使程序继续.. 输入要加密的文本:输入用于加密的密钥:(用户输入) 然后程序退出.. //message to be encrypted char text[250]; //word to use as the key char key[50]; //stores the encrypted word char encrypted[250]; char answer; printf(“Would you like to (E)ncrypt or (D)ecrypt? “); scanf(” %c”, &answer); if(answer == ‘e’ || answer == ‘E’) { printf(“Enter the text you want […]

原始终端模式 – 如何接受输入?

我有一个聊天客户端,它以原始终端模式接收输入,但我不知道在这种模式下处理输入。 我需要知道两件事: 如何逐个字符地读取输入并显示它? 我是否必须有某种读取循环,一次读取一个字符并将其存储在缓冲区中? 如果我希望我的服务器处理新行条目的输入,我是否必须扫描每个字符进入我的缓冲区并查找\n ? 此外,在\n上刷新的逐个字符读取循环的例子真的很棒。 谢谢!