更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_seq_buf.h 文件参考

浏览源代码.

结构体

struct  SeqBuf
 

函数

struct SeqBufLosBufCreat (void)
 创建seq buf 更多...
 
int LosBufPrintf (struct SeqBuf *seqBuf, const char *fmt,...)
 支持可变参数 写 buf 更多...
 
int LosBufVprintf (struct SeqBuf *seqBuf, const char *fmt, va_list argList)
 真正写 buf 函数,调整 size/count的值,count可理解为偏移位 更多...
 
int LosBufRelease (struct SeqBuf *seqBuf)
 释放 seq buf 更多...
 

函数说明

◆ LosBufCreat()

struct SeqBuf * LosBufCreat ( void  )

创建seq buf

在文件 los_seq_buf.c76 行定义.

77{
78 struct SeqBuf *seqBuf = NULL;
79
80 seqBuf = (struct SeqBuf *)malloc(sizeof(struct SeqBuf));
81 if (seqBuf == NULL) {
82 errno = -LOS_ENOMEM;
83 return NULL;
84 }
85 (void)memset_s(seqBuf, sizeof(struct SeqBuf), 0, sizeof(struct SeqBuf));
86
87 return seqBuf;
88}
void * malloc(size_t size)
动态分配内存块大小
Definition: malloc.c:81
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 void
函数调用图:
这是这个函数的调用关系图:

◆ LosBufPrintf()

int LosBufPrintf ( struct SeqBuf seqBuf,
const char *  fmt,
  ... 
)

支持可变参数 写 buf

在文件 los_seq_buf.c133 行定义.

134{
135 va_list argList;
136 int ret;
137
138 va_start(argList, fmt);//可变参数的实现,有点意思.
139 ret = LosBufVprintf(seqBuf, fmt, argList);
140 va_end(argList);
141
142 return ret;
143}
int LosBufVprintf(struct SeqBuf *seqBuf, const char *fmt, va_list argList)
真正写 buf 函数,调整 size/count的值,count可理解为偏移位
Definition: los_seq_buf.c:90
函数调用图:
这是这个函数的调用关系图:

◆ LosBufRelease()

int LosBufRelease ( struct SeqBuf seqBuf)

释放 seq buf

在文件 los_seq_buf.c145 行定义.

146{
147 if (seqBuf == NULL) {
148 return -LOS_EPERM;
149 }
150
151 if (seqBuf->buf != NULL) {
152 free(seqBuf->buf);
153 seqBuf->buf = NULL;
154 }
155 free(seqBuf);
156
157 return LOS_OK;
158}
void free(void *ptr)
释放ptr所指向的内存空间
Definition: malloc.c:66
char * buf
Definition: los_seq_buf.h:49
函数调用图:
这是这个函数的调用关系图:

◆ LosBufVprintf()

int LosBufVprintf ( struct SeqBuf seqBuf,
const char *  fmt,
va_list  argList 
)

真正写 buf 函数,调整 size/count的值,count可理解为偏移位

在文件 los_seq_buf.c90 行定义.

91{
92 bool needreprintf = FALSE;
93 int bufLen;
94
95 if (seqBuf == NULL) {
96 return -LOS_EPERM;
97 }
98
99 if (seqBuf->buf == NULL) {
100 seqBuf->size = SEQBUF_PAGE_SIZE;
101 seqBuf->buf = (char *)malloc(seqBuf->size);
102 if (seqBuf->buf == NULL) {
103 return -LOS_ENOMEM;
104 }
105 (void)memset_s(seqBuf->buf, seqBuf->size, 0, seqBuf->size);
106 seqBuf->count = 0;
107 }
108
109 do {
110 bufLen = vsnprintf_s(seqBuf->buf + seqBuf->count, seqBuf->size - seqBuf->count,
111 seqBuf->size - seqBuf->count - 1, fmt, argList);
112 if (bufLen >= 0) {
113 /* succeed write. */
114 seqBuf->count += bufLen;//成功写入,count要增长
115 return 0;
116 }
117 if (seqBuf->buf[seqBuf->count] == '\0') {//这里没看懂,为啥要有这个判断, @note_thinking
118 free(seqBuf->buf);
119 seqBuf->buf = NULL;
120 break;
121 }
122
123 needreprintf = TRUE;
124
125 if (ExpandSeqBuf(seqBuf, seqBuf->count) != 0) {
126 break;
127 }
128 } while (needreprintf);
129
130 return -LOS_NOK;
131}
static int ExpandSeqBuf(struct SeqBuf *seqBuf, size_t oldCount)
Definition: los_seq_buf.c:37
size_t size
Definition: los_seq_buf.h:50
size_t count
Definition: los_seq_buf.h:51
函数调用图:
这是这个函数的调用关系图: