Tag: 缓冲区

C:清除STDIN

基本上在每个printf之前的windows的代码块我有“fflush(stdin);” 哪个有效。 当我将我的代码复制到Linux时,它不起作用,也没有“fflush(stdin);”的替代方案。 我发现了。 无论我采用哪种方式,输入似乎都没有在缓冲区中清除,或者我的代码中的某些内容不正确。 #include #include #include #include int main() { char pbuffer[10], qbuffer[10], kbuffer[10]; int p=0, q=0, k=0; int r, i, Q, count, sum; char a[3]; a[0]=’y’; while(a[0]==’y’ || a[0]==’Y’) { printf(“Enter ap value: \n”); fgets(pbuffer, sizeof(pbuffer), stdin); p = strtol(pbuffer, (char **)NULL, 10); printf(“Enter aq value: \n”); fgets(qbuffer, sizeof(qbuffer), stdin); q = […]

fscanf help:如何检查格式

因此,当前函数应该看到存储在两个磅符号之间的任何东西(#abc#应该给回abc),但是如果我想错误检查以查看是否有丢失的英镑符号,或者英镑符号之间没有任何内容,或者两个英镑符号之间的字符串长度大于一定数量的字符,我是否使用fscanf函数来做到这一点? 这是fscanf代码的样子: if (fscanf(fp, ” %c%[^#]%c”, &start, buffer, &end) == 3) { return strdup(buffer); } else { return NULL; }

使用fread读入int缓冲区

我想知道我是否可以使用fread将数据读入整数缓冲区。 我看到fread()将void *作为第一个参数。 所以我不能只传递一个整数缓冲区(类型转换为void *),然后使用它来读取我想要的文件中的howmuchevery字节,只要缓冲区足够大? 即。 我无法做到: int buffer[10]; fread((void *)buffer, sizeof(int), 10, somefile); // print contents of buffer for(int i = 0; i < 10; i++) cout << buffer[i] << endl; 这有什么不对? 谢谢

man7.org声明有效的程序无效

在http://man7.org/linux/man-pages/man3/setbuf.3.html中给出的关于缓冲区使用function的手册中,下面的一段代码被声明为无效。 但是,当我在我的机器上尝试时,事情进展顺利: #include int main(void) { char buf[BUFSIZ]; setbuf(stdin, buf); printf(“Hello, world!\n”); return 0; } 这个年龄给出的理由是: 您必须确保时间流关闭时buf指向的空间仍然存在,这也会在程序终止时发生。 我在这段代码中看不出任何错误。 它也很顺利。 是对还是不对? 任何人都可以向我解释一下吗? ################################################ 2 正如@Lingxi在下面回答的那样,主函数返回后缓冲区将被销毁。 但stdin幸存了下来。 但是, stdin还有一个默认缓冲区吗? 而且,我们可以假设stdin是一个流,并且有一些方法可以销毁或关闭该流吗?

zlib:如何维度avail_out

我想使用zlib来缩小一小块内存(<= 16 KiB)。 输出也存储在内存块中。 这里没有磁盘或数据库访问。 根据文档,我应该反复调用deflate() ,直到整个输入被放气。 在这两者之间,我必须增加输出所在的内存块的大小。 然而,这似乎不必要地复杂,甚至可能效率低下。 据我所知输入的大小,我不能预先确定输出所需的最大大小,然后只需调用一次deflate()吗? 如果是这样,最大输出尺寸是多少? 我假设类似:输入大小+一些字节开销

在C中创建访问共享内存

所以我有一个问题,我真的不知道如何去做。 我希望也许你可以让我知道如何处理它。 我需要在共享内存中分配N个缓冲区。 每个缓冲区应初始化为0.然后我必须分叉N / 2个子进程数。 然后每个孩子(i)将值(i)写入缓冲区(i),睡眠一秒钟。 然后读取当前缓冲区的值,如果值在平均时间内更改,则显示一条消息。 然后孩子移动i-position N / 2次。 So I can have N Buffers = 11. (must be prime) N/2 children = 5. So child 2 would: write into buffer 2, sleep, read from buffer 2. (now move 2 positions) write into buffer 4, sleep, read from buffer 4. (now move […]

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

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

使用网络Kernal扩展监控网络数据包

我正在构建NKE(网络核心扩展),用于过滤和修改数据包。 myipfilter_output_redirect回调给出了mbuf_t指针,并根据研究的知识,它具有与网络调用相关的所有信息。 我想从这个mbuf_t中读取html并将一个css / html注入其中。 我怎么能实现它? static errno_t myipfilter_output(void* cookie, mbuf_t* data, ipf_pktopts_t options) { if (data) log_ip_packet(data, kMyFiltDirOut); return 0; } static errno_t myipfilter_input(void* cookie, mbuf_t* data, int offset, u_int8_t protocol) { if (data) log_ip_packet(data, kMyFiltDirIn); return 0; } static void myipfilter_detach(void* cookie) { /* cookie isn’t dynamically allocated, no need to free in […]

无法理解C和C ++中缓冲区大小的实验结果。 ifstream还比FILE慢吗?

这一切都始于这个问题 – > 如何从文件中读取数据块,然后从该块读取到矢量? 为了最大限度地减少磁盘I / O操作,我进行了一些实验,看看缓冲区的大小是否会对程序所用的时间产生任何影响。 我使用了以下两个代码,一个是面向c的,另一个是c ++(虽然都是用gcc编译的): – 面向c的代码: – int buffer_size=1024; FILE *file; file = fopen(argv[1], “r”); FILE *out_file; out_file = fopen(“in”, “w”); char out_buffer[2048]; setvbuf(out_file, out_buffer, _IOFBF, buffer_size); char buffer[2048]; setvbuf(file, buffer, _IOFBF, buffer_size); while (!feof(file)) { char sl[1000]; fgets(sl, 140 , file); fputs(sl, out_file); } c代码给出了以下结果(对于14 MB的文件): – Buffer_size Time […]

如何发送大小超过64 KB的UDP数据包

我无法发送大小超过64 KB的IP multicast datagrams (对于我的实验,我需要这样做)。 我正在通过10 Gigabit ethernet链路直接连接的计算机之间传输数据包(中间没有任何跳跃,由traceroute确认)。 所有计算机都安装了Ubuntu 12.04。 我通过在/etc/sysctl.conf添加以下行来更改读写缓冲区的限制: net.core.rmem_max=12582912 net.core.wmem_max=12582912 net.core.rmem_default=12582912 net.core.wmem_default=12582912 并使用sysctl -avalidation了更改(运行sysctl -p之后)。 我是否需要重新启动才能看到更改? (我正在共享机器,所以不总是可以重启)。 用于发送和接收的接口的MTU在所有计算机中都是9000字节。 我已成功发送大小约为60 KB的数据包,对于100 KB数据包,使用tcpdump捕获显示数据包甚至没有被发送并且可能被内核丢弃(我没有在tcpdump跟踪中看到它们)。 为了能够传输大数据包(最好是100 MB的大小),我还需要做些什么?