putc函数源代码。。。

想知道这个函数具体怎么实现的看了一下源码
int putc (int c, FILE * __F)
{
return (--
F->cnt >= 0)
? (int) (unsigned char) (*
_F->ptr++ = (char)_c)
: flsbuf (_c, __F);
}

除了看懂条件运算符?外,其他的都没遇见过,能解释一下吗?

在吗

解释:真正在做putc的事情的是*_F->ptr++ = (char)_c。

F是FILE*类型的,所以*F->ptr就是F的ptr属性。为了很好的解释这一点,现将FILE类型解释一下:

struct _iobuf {
    char *ptr;  //下一个字符地址
    int cnt;    //剩余内存地址
    char *base; //起始的内存地址
    int flag;   //描述状态(读写)
    int fd;     //描述符
  };

我们真正需要的是前三个。如果你输出了3个字符是“123”,‘1’的内存地址就是base,‘3’的地址的下一个地址就是ptr。如果你的输出流最多可以输出5个字符,而你输出了3个字符,cnt的值就是5-3=2.

flsbuf (_c, __F)做的是什么呢?

很简单,在流的内存不够时"冲刷”缓存,也就是复位缓存。