Tag: stream

XOR在一个非常大的文件上

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

撤消ungetc()的效果:“如何”fseek(),rewind()和fsetpos()这样做?每次都重新填充缓冲区吗?

嗯!!我怎么能把整件事放在一个明确的问题上!!让我试试: 我知道使用fopen()打开的文件被缓冲到内存中。我们使用缓冲区来提高效率。在从文件中读取文件时,首先将文件内容读入缓冲区,然后从该缓冲区中读取。类似地,在对文件的写入中,首先将内容写入缓冲区,然后写入文件。 但是fseek() , fsetpos()和rewind() 丢弃之前调用ungetc()呢? 你能告诉我它是如何完成的吗?我的意思是,鉴于我们已经打开了一个文件进行读取并将其复制到缓冲区中。现在使用ungetc()我们已经更改了缓冲区中的一些字符。这就是我刚才失败的地方即使经过多方努力也能理解 以下是关于ungetc()说法 – “对fseek,fsetpos或fwindpos的调用会丢弃之前使用此函数重新放入其中的任何字符。” – 如何放弃已放入缓冲区的字符?一种方法是删除被删除的原始字符,并将每个放入的新字符识别并替换为原始字符。但这似乎效率很低。另一种选择是将原始文件的副本加载到缓冲区中,并将文件指针放在预期的位置。这两个方法的fseek,fsetpos或rewind采取放弃使用ungetc()放置的字符? 对于文本流,流中未读字符的存在,使用ungetc()放入的字符如何影响ftell()的返回值?我的混淆来自关于ftell()和ungetc()的以下行关于ftell这个链接( SOURCE ) “对于文本流,数值可能没有意义但仍然可以用于稍后使用fseek将位置恢复到相同位置( 如果使用ungetc放回的字符仍然等待被读取,则行为未定义 )。” 关注上段的最后一行, pending of being read与“ungetc() – 获得的”字符被丢弃有关吗? 每次我们读取使用ungetc()放入流中的ungetc() ,它是否在读取后被丢弃 ?

使用HTTP身份validation与C中的libcurl进行Twitter流式传输

可能重复: 尝试使用C访问Twitter Streaming API 我不确定我的代码中出了什么问题,但似乎validation方面存在问题。 每次执行代码时都没有输出。 我的目标是希望从Twitter API接收推文流。 问题可能是其他问题。 但我不确定。 请帮忙。 这是C代码: #include #include #include #include struct string { char *ptr; size_t len; }; void init_string(struct string *s) { s->len = 0; s->ptr = malloc(s->len+1); if (s->ptr == NULL) { fprintf(stderr, “malloc() failed\n”); exit(EXIT_FAILURE); } s->ptr[0] = ‘\0’; } size_t writefunc(void *ptr, size_t size, size_t […]

如何检查stdin是否仍然没有阻塞打开?

我需要用纯C编写的程序在stdin关闭时停止执行。 在程序主循环中有不确定的工作,并且我无法在那里使用阻塞检查(如getc() )(没有数据应该到达stdin – 它只是在未知时间保持打开状态)。 我打算在实现inetd,xinetd或其类似物中托管的网络守护程序时使用所描述的function – 它应该在连接保持打开时在stdout上发出数据,并在关闭时正确完成工作。 现在我的程序被托管服务杀死,因为它在连接终止后不会停止。 我想知道将带有O_NONBLOCK标志的fctntl()应用于stdin描述符是否允许我在非阻塞模式下使用read()函数? 我应该以某种方式使用select()吗? PS数据不是假定的,但可能会到达stdin。 一种非阻塞读出方式应该是问题的答案。

尝试使用C访问Twitter Streaming API

我从C libcurl得到了代码输出到字符串 。 我修改了它,我想用它来访问Twitter Stream。 我添加了curl_easy_setopt(curl, CURLOPT_URL, “http://stream.twitter.com/1/statuses/sample.json”); 和curl_easy_setopt(curl, CURLOPT_USERPWD, “neilmarion:my_password”); 在代码中。 但问题是每当我执行它时,都没有输出。 一定是什么问题? 谢谢。 #include #include #include #include struct string { char *ptr; size_t len; }; void init_string(struct string *s) { s->len = 0; s->ptr = malloc(s->len+1); if (s->ptr == NULL) { fprintf(stderr, “malloc() failed\n”); exit(EXIT_FAILURE); } s->ptr[0] = ‘\0’; } size_t writefunc(void *ptr, […]

C中的字符串流

print2fp(const void *buffer, size_t size, FILE *stream) { if(fwrite(buffer, 1, size, stream) != size) return -1; return 0; } 如何将数据写入字符串流而不是文件流?

从文件或标准输入读取

我正在编写一个实用程序,它接受文件名或从stdin读取。 我想知道检查stdin是否存在的最强大/最快的方法(数据是否通过管道传输到程序),如果是,则读取该数据。如果不存在,则处理将在文件名上进行给出。 我已经尝试使用以下测试stdin大小,但我相信因为它是一个流而不是一个实际的文件,它不起作用,因为我怀疑它会,它总是打印-1 。 我知道我总是可以一次读取输入1个字符!= EOF但是我想要一个更通用的解决方案,所以如果stdin存在,我最终会得到fd或FILE *所以程序的其余部分将无缝运行。 我希望能够知道它的大小,等待前一个程序关闭流。 long getSizeOfInput(FILE *input){ long retvalue = 0; fseek(input, 0L, SEEK_END); retvalue = ftell(input); fseek(input, 0L, SEEK_SET); return retvalue; } int main(int argc, char **argv) { printf(“Size of stdin: %ld\n”, getSizeOfInput(stdin)); exit(0); } 终奌站: $ echo “hi!” | myprog Size of stdin: -1

C和C ++样式文件IO之间的性能差异

我一直听说C ++文件I / O操作比C风格I / O慢得多。 但是我没有找到任何关于实际有多缓慢的实际参考,所以我决定在我的机器上测试它(Ubuntu 12.04,GCC 4.6.3,ext4分区格式)。 首先,我在磁盘中写了一个~900MB的文件。 C ++( ofstream ):163s ofstream file(“test.txt”); for(register int i = 0; i < 100000000; i++) file << i << endl; C( fprintf ):12s FILE *fp = fopen(“test.txt”, “w”); for(register int i = 0; i < 100000000; i++) fprintf(fp, "%d\n", i); 我期待这样的输出,它表明在C ++ C中写入文件要慢得多。然后我使用C和C ++ I […]