Tag: stdio

stdio总是设置errno吗?

当stdio流遇到错误(但不是EOF)时,将设置流的错误指示符,以便ferror()将返回非零值。 我一直认为在errno可以获得更多信息。 但我怎么知道这个? 某些函数的文档[例如Linux下的man fopen ]表示也将设置errno 。 然而, man fgets根本没有提到errno 。 glibc信息页面令人放心: 除了设置与流关联的错误指示符之外,对流进行操作的函数还以与对文件描述符进行操作的相应低级函数相同的方式设置“errno”。 但我不知道这种保证有多强。 它是否需要C标准? Visual C / C ++会发生什么?

是否可以在单个C程序中的多个终端窗口上输出?

基本上我想做的是为一个程序提供两个输出终端窗口。 一个是显示程序正在执行的操作的日志,第二个将显示类似值的表。 这些终端的所有输出都将由程序本身生成。 这可以用C和stdio做吗? 我意识到这可能更适合用于GUI或ncurses,但我仍然很好奇是否可以这样做。 编辑:也许应该提一下我在linux上做这个(特别是xubuntu)。

读取未知大小的文件内容

我想处理配置文件的内容。 配置文件可以是任何大小。 程序挂起后,当我运行以下代码时,我收到一个总线错误: FILE *fp; struct stat st; char *buffer; fp = fopen(CONFIG_FILE, “r”); if (fp == NULL) { // error handling and cleanup omitted for brevity } fstat(fileno(fp), &st); fread(buffer, sizeof(char), st.st_size, fp); fprintf(stderr, “%s\n”, *buffer); fclose(fp); 我已经读过缓冲区溢出可能导致总线错误。 我很确定我的char *buffer出现缓冲区溢出。 但是, 如何在运行时指定缓冲区的大小? 编辑 – 总线错误是由于我在长途电话中硬编码1懒惰造成的。 已使用sizeof(char)更新代码示例以解决此问题。

在C中检测EOF

我使用以下C代码从用户获取输入,直到EOF发生,但问题是此代码不起作用,它在第一次输入后终止。 任何人都可以告诉我这个代码有什么问题。 提前致谢。 float input; printf(“Input No: “); scanf(“%f”, &input); while(!EOF) { printf(“Output: %f”, input); printf(“Input No: “); scanf(“%f”, &input); }

从stdio文件写入函数处理返回值有什么好的编程模式

我正在研究一些产生大量代码的代码 ignoring return value of ‘size_t fwrite(const void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result 使用g ++编译时的警告,我想知道实际记录和处理大量单独顺序fwrite的返回值的最佳编程模式(即循环中不是相同的fwrite ) 让我们说代码现在看起来像这样: fwrite (&blah, sizeof (blah), 1, fp); // … more code … fwrite (&foo, sizeof (foo), 1, fp); // … more code … 我正在考虑这样的事情,但我可能很难清理文件指针: if (fwrite (&blah, sizeof (blah), 1, fp) != 1) return someerrorcode; // … […]

#include 在ac程序中真的做了什么

我是c编程的新手,我编写了一些简单的程序“Hello world”风格。 在所有这些程序中,我把#include放在顶部,但我不确定这究竟是什么意思。 我用谷歌搜索它,我发现stdio.h是一个具有预处理器命令的文件,但什么是预处理器? 我想当我编写代码时,我编译它并且我的代码转换为“计算机”可以读取的forms然后我可以运行它。 有人可以向我解释这个命令的用法是什么吗?

C fgets与fgetc的阅读线

我需要读取一行文本(以换行符结尾)而不对长度做出假设。 所以我现在面对各种可能性: 使用fgets并每次检查最后一个字符是否为换行符并连续追加到缓冲区 使用fgetc读取每个字符,偶尔重新分配缓冲区 Intuition告诉我fgetc变体可能会变慢,但是再一次我没有看到fgets如何在不检查每个角色的情况下做到这一点(我的直觉并不总是那么好)。 线条非常大,因此性能很重要。 我想知道每种方法的优缺点。 先感谢您。

fprintf是否在引擎盖下使用malloc()?

我想要一个最小的o-damn-malloc-just-failed处理程序,它将一些信息写入文件(可能只是标准错误)。 我更喜欢使用fprintf()而不是write(),但是如果fprintf()本身尝试使用malloc(),这将很难失败。 是否有一些保证,无论是在C标准中,还是只是在glibc中,fprintf都不会这样做?

没有“-std = c99”的大规模fprintf速度差异

我写过一部表现不佳的翻译,几周来我一直在挣扎。 在下面简单的bechmark #include int main() { int x; char buf[2048]; FILE *test = fopen(“test.out”, “wb”); setvbuf(test, buf, _IOFBF, sizeof buf); for(x=0;x<1024*1024; x++) fprintf(test, "%04d", x); fclose(test); return 0 } 我们看到以下结果 bash-3.1$ gcc -O2 -static test.c -o test bash-3.1$ time ./test real 0m0.334s user 0m0.015s sys 0m0.016s 正如您所看到的,在添加“-std = c99”标志的那一刻,性能崩溃了: bash-3.1$ gcc -O2 -static -std=c99 test.c […]

FILE类型的对象的属性是什么

FILE对象通常是通过调用fopen或tmpfile创建的,它们都返回对这些对象之一的引用。 Struct名为FILE的属性是什么,还是依赖于平台?