Tag:

如何在文件*流中的特定点停止并扫描某些值?

我有一个名为test.txt的文件,该文件包含: 10.213123 41.21231 23.15323 当我看到我希望扫描后的3个数字,如下所示: x = 10.213123 y = 41.21231 z = 23.15323 我有点困惑,因为在这里,fgets扫描整条线,我怎样才能将3个数字扫描成双线? 因为数字可以是各种长度? 我这样做是为了打印出它从文件中读取的内容,但我无法绕过它。 void print_lines(FILE *stream) { char line[MAX_LINE_LENGTH]; while (fgets(line, MAX_LINE_LENGTH, stream) != NULL) { fputs(line, stdout); } }

在fgets While循环时检测EOF

我使用fdopen和fgets循环遍历TCP套接字输入的每一行: int connfd = accept(listenfd, (struct sockaddr*)NULL, NULL); FILE *f; char line[1024]; f = fdopen(connfd, “a+”); while(fgets(line, sizeof(line), f) != NULL) { printf(“%s”, line); } printf(“EOF”); fclose(f); 问题是,由于某些奇怪的原因, fgets似乎永远不会返回NULL 。 有没有其他方法来检查EOF ?

连续扫描流缓冲区中字符串的最佳方法

我有这种情况,我的function不断接收各种长度的数据。 数据可以是任何东西。 我想找到我在这个数据中寻找特定字符串的最佳方法。 该解决方案将需要以某种方式缓冲以前的数据,但我无法解决问题。 以下是问题的示例: DATA IN – > [\ x00 \ x00 \ x01 \ x23B] [] [LABLABLABLABLA \ x01TO] [KEN] [BLA \ x01] … 如果每个[…]代表一个数据块而[]代表一个没有项目的数据块,那么扫描字符串TOKEN的最佳方法是什么? 更新:我意识到这个问题有点复杂。 []不是分隔符。 我只是用它们来描述上面例子中的块的结构。 此外,TOKEN不是静态字符串。 它是可变长度的。 我认为逐行读取的最佳方法是问题是如何将可变长度的流缓冲区读入行。

C语言库中的数据流

如何在C中执行数据流(管道和filter,流处理,基于流)? 而不是使用UNIX管道。 我最近遇到了stream.py 。 流是具有流水线机制的迭代,以实现数据流编程和简单的并行化。 我们的想法是获取一个函数的输出,该函数将一个iterable转换为另一个iterable并将其作为另一个这样的函数的输入插入。 虽然您已经可以使用函数组合执行此操作,但此包通过重载>>运算符为其提供了优雅的表示法。 我想在C中复制这种function的简单版本。我特别喜欢>> operator的重载以避免函数组合乱。 维基百科在1990年的一篇Usenetpost中指出了这一暗示 。 为何选择C? 因为我希望能够在微控制器和其他高级语言(Max,Pd *,Python)的C扩展中实现这一点。 *(具有讽刺意味的是Max和Pd是用C编写的,特别是为了这个目的 – 我正在寻找一些准系统)

模拟流数据

我正在尝试编写一个程序,它将从平面数据文件中读取并模拟流式传输,这样我就可以测试一个读取流数据的程序,而无需连接和启动流式硬件。 有哪些更现实的方法可以实现这一目标? 我需要它以可变速度流,这取决于我模拟的硬件。 到目前为止,我的两个想法是写入命名管道的程序,或者以我需要的速率写入虚拟串行端口的程序。 是否有更好(更现实)的模拟流数据的方式?

在C中以块的forms将内存写入套接字

我正在尝试将内存内容写入块中的套接字。 我可以写出比我的缓冲区小的文件,但是其他任何东西,我都在深水中。 /* allocate memory for file contents */ char fileContents = malloc(sizeof(char)*filesize); /* read a file into memory */ read(fileDescriptor, fileContents , filesize); int chunksWritten; /* Write the memory to socket? */ if (filesize > MAX_BLOCK_SIZE){ while (chunksWritten < filesize){ // what goes here? } } else { chunksWritten = writen(sd, fileContents, filesize); // […]

c使用lseek以相反的顺序复制文件

我已经有了如何从一开始就将一个文件复制到另一个文件,但是我怎样才能修改程序以相反的顺序复制它? 源文件应具有读访问权和目标文件读写执行权。 我必须使用文件控制库。 例如 FILE A File B should be |———| |———-| |ABCDEF | |FEDCBA | |———| |———-| ** * ** * ** * ** * ** * ** * ** * 更新 * ** * ** * ** * 感谢MikeNakis的提示和建议,Sangeeth为您的代码 我已经重新编写了代码,现在它是以反向顺序打印文件大小的复制字节 这是代码 #include #include #include #include #include #include int main(int argc, char *argv[]) { […]

fopen’d文件的默认输入和输出缓冲?

因此,FILE流可以同时具有输入和输出缓冲区。 您可以使用setvbuf调整输出流(我不知道任何使用输入缓冲区大小和行为的方法)。 此外,默认情况下缓冲区是BUFSIZ (不确定这是POSIX还是C的东西)。 很明显这对stdin / stdout / stderr意味着什么,但新打开文件的默认值是什么? 它们是否针对输入和输出进行缓冲? 或者也许只有一个? 如果它是缓冲的,输出默认为阻塞或行模式吗? 编辑:我已经做了一些测试,看看Jonathan Leffler的回答如何影响现实世界的节目。 看来,如果你做了一个读,那么写。 写入将导致输入缓冲区的未使用部分完全丢弃。 事实上,将会有一些寻求将事物保持在正确的文件偏移量。 我用这个简单的测试程序: /* input file contains “ABCDEFGHIJKLMNOPQRSTUVWXYZ” */ #include #include int main() { FILE *f = fopen(“test.txt”, “r+b”); char ch; fread(&ch, 1, 1, f); fwrite(“test”, 4, 1, f); fclose(f); return 0; } 导致以下系统调用: read(3, “ABCDEFGHIJKLMNOPQRSTUVWXYZ\n”, 4096) = 27 // […]

如何使用C程序直播video。 什么应该是HTTP回复? 如果可能,我如何使用分块编码?

(实际问题已被编辑,因为我成功地进行了直播,但现在我不理解客户端和我的C代码之间的通信。) 好吧,我终于使用我的C代码进行直播。 但我不能理解“HTTP”是如何在这里工作的。 我使用wireshark在链接http://www.flumotion.com/demosite/webm/上研究了我的浏览器和服务器的通信。 我发现客户端首先发送此GET请求 GET /ahiasfhsasfsafsgfg.webm HTTP/1.1 Host: localhost Connection: keep-alive Referer: file:///home/anirudh/Desktop/anitom.html User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Range: bytes=0-1024 对于此获取请求,服务器通过发送此回复来响应 HTTP/1.0 200 OK Date: Tue, 01 Mar 2011 06:14:58 GMT Connection: close Cache-control: private Content-type: video/webm Server: FlumotionHTTPServer/0.7.0.1 然后服务器发送数据,直到客户端断开连接。 […]

fmemopen和open_memstream有什么区别?

在阅读关于字符串流的GNU文档时,我发现了两个类似的函数,它们执行非常类似的操作: FILE * fmemopen (void *buf, size_t size, const char *opentype) FILE * open_memstream (char **ptr, size_t *sizeloc) 从阅读文档,似乎open_memstream应该用于打开输出流和fmemopen用于输入。 抓住我的是你可以传递给fmemopen 。 linux手册页解释说 : 如果将buf指定为NULL,则fmemopen()会动态分配一个缓冲区大小为bytes的字节。 这对于想要将数据写入临时缓冲区然后再次读取的应用程序非常有用。 关闭流时,将自动释放缓冲区。 请注意,调用者无法获取指向此调用分配的临时缓冲区的指针(但请参阅下面的open_memstream())。 那么,如果fmemopen可以处理打开输入/输出流,那么使用open_memstream fmemopen什么意义呢?