Explorar o código

docx: 添加注释

SongZihuan %!s(int64=3) %!d(string=hai) anos
pai
achega
1dc9dcbf5e
Modificáronse 2 ficheiros con 10 adicións e 0 borrados
  1. 3 0
      src/core/parser.c
  2. 7 0
      src/tool/stdio_.c

+ 3 - 0
src/core/parser.c

@@ -198,6 +198,8 @@ static size_t readFuncStdin(struct readerDataStdin *data, char *dest, size_t len
         data->no_first = true;
         data->no_first = true;
         free(data->data);
         free(data->data);
 
 
+        /* 在Linux平台, 只用当数据写入stdin缓冲行时checkStdin才true */
+        /* 在Windows平台则是根据读取的最后一个字符是否为\n或者是否有按键按下来确定缓冲区是否有内容 */
         while (!checkStdin()) {  // 无内容则一直循环等到
         while (!checkStdin()) {  // 无内容则一直循环等到
             if (getStdinSignalFunc()) {  // 设置了中断函数, 并且该函数返回0
             if (getStdinSignalFunc()) {  // 设置了中断函数, 并且该函数返回0
                 printf_stdout(0, "\n %s \n", HT_aFunGetText(Interrupt_n, "Interrupt"));
                 printf_stdout(0, "\n %s \n", HT_aFunGetText(Interrupt_n, "Interrupt"));
@@ -223,6 +225,7 @@ static size_t readFuncStdin(struct readerDataStdin *data, char *dest, size_t len
 
 
         fungetc_stdin(ch);
         fungetc_stdin(ch);
 
 
+        /* 读取内容的长度不得少于STDIN_MAX_SZIE, 否则可能导致编码转换错误 */
         if (fgets_stdin(&data->data, STDIN_MAX_SIZE) == 0) {
         if (fgets_stdin(&data->data, STDIN_MAX_SIZE) == 0) {
             writeErrorLog(aFunCoreLogger, "The stdin buf too large (> %d)", STDIN_MAX_SIZE);
             writeErrorLog(aFunCoreLogger, "The stdin buf too large (> %d)", STDIN_MAX_SIZE);
             *read_end = true;
             *read_end = true;

+ 7 - 0
src/tool/stdio_.c

@@ -9,6 +9,13 @@
 #include <stdarg.h>
 #include <stdarg.h>
 #include "tool.h"
 #include "tool.h"
 
 
+/* 注意:
+ * checkStdin在Windows和Linux之前行为具有差别, 本质目标时检查缓冲区是否有内容
+ * Linux使用无阻塞读取直接检查, 检查结果确实为缓冲区是否有内容
+ * Windows则是通过记录每次读取时是否已经读取`\n`来判断缓冲区是否有内容, 并且配合khbit来判断是否有内容输入
+ * 实际上, khbit只能代表有内容输入而无法确定内容是否已经输入到缓冲区中
+ */
+
 #ifdef aFunWIN32_NO_CYGWIN
 #ifdef aFunWIN32_NO_CYGWIN
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 #pragma warning(disable : 5105)  // 关闭 5105 的警告输出 (Windows.h中使用)
 #pragma warning(disable : 5105)  // 关闭 5105 的警告输出 (Windows.h中使用)