天天看點

判斷标準I/O的緩沖區類型

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

<code>#include &lt;stdio.h&gt;</code>

<code>void</code>

<code>pr_stdio(</code><code>const</code>

<code>char</code> <code>*,</code><code>file</code>

<code>*);</code>

<code>int</code> <code>main()</code>

<code>{</code>

<code>    </code><code>file</code>

<code>*fp;</code>

<code>    </code><code>fputs</code><code>(</code><code>"enter any character\n"</code><code>,stdout);</code>

<code>    </code><code>if</code><code>(</code><code>getchar</code><code>()==eof)</code>

<code>        </code><code>printf</code><code>(</code><code>"getchar error"</code><code>);</code>

<code>    </code><code>fputs</code><code>(</code><code>"one line to standard error\n"</code><code>,stderr);</code>

<code>    </code><code>pr_stdio(</code><code>"stdin"</code><code>,stdin);</code>

<code>    </code><code>pr_stdio(</code><code>"stdout"</code><code>,stdout);</code>

<code>    </code><code>pr_stdio(</code><code>"stderr"</code><code>,stderr);</code>

<code>    </code> 

<code>    </code><code>if</code><code>((fp=</code><code>fopen</code><code>(</code><code>"/etc/motd"</code><code>,</code><code>"r"</code><code>))==null)</code>

<code>        </code><code>printf</code><code>(</code><code>"fopen error"</code><code>);</code>

<code>    </code><code>if</code><code>(</code><code>fgetc</code><code>(fp)==eof)</code>

<code>        </code><code>printf</code><code>(</code><code>"getc error"</code><code>);</code>

<code>    </code><code>pr_stdio(</code><code>"/etc/motd"</code><code>,fp);</code>

<code>    </code><code>return</code>

<code>0;</code>

<code>}</code>

<code>char</code> <code>*name,</code><code>file</code>

<code>*fp)</code>

<code>    </code><code>printf</code><code>(</code><code>"stream=%s, "</code><code>,name);</code>

<code>    </code><code>if</code><code>(fp-&gt;_flags &amp; _io_unbuffered)</code>

<code>        </code><code>printf</code><code>(</code><code>"unbuffered"</code><code>);</code>

<code>    </code><code>else</code>

<code>if</code><code>(fp-&gt;_flags &amp; _io_line_buf)</code>

<code>        </code><code>printf</code><code>(</code><code>"line buffered"</code><code>);</code>

<code>        </code><code>printf</code><code>(</code><code>"fully buffered or modified"</code><code>);</code>

<code>    </code><code>printf</code><code>(</code><code>",buffer size = %d\n"</code><code>,fp-&gt;_io_buf_end-fp-&gt;_io_buf_base);</code>

  在ubuntu下運作如下:

判斷标準I/O的緩沖區類型
上一篇: 備忘
下一篇: linux kernel map