<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>工具 on Kernel Notes</title><link>https://my-blog.j8465383071.workers.dev/tags/%E5%B7%A5%E5%85%B7/</link><description>Recent content in 工具 on Kernel Notes</description><generator>Hugo -- 0.147.7</generator><language>zh-cn</language><lastBuildDate>Wed, 02 Sep 2026 16:23:38 +0800</lastBuildDate><atom:link href="https://my-blog.j8465383071.workers.dev/tags/%E5%B7%A5%E5%85%B7/index.xml" rel="self" type="application/rss+xml"/><item><title>c++</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/cpp/</link><pubDate>Thu, 13 Aug 2026 10:54:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/cpp/</guid><description>&lt;h1 id="1-容器">1 容器&lt;/h1>
&lt;h2 id="11-基本概念">1.1 基本概念&lt;/h2>
&lt;p>c++ stl&lt;/p>
&lt;ul>
&lt;li>对象&lt;/li>
&lt;li>指针&lt;/li>
&lt;li>引用&lt;/li>
&lt;li>迭代器&lt;/li>
&lt;li>容器接口&lt;/li>
&lt;/ul>
&lt;h2 id="11-接口">1.1 接口&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1.1 vector —— 动态数组
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">v&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push_back&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 末尾添加
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">pop_back&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 删除末尾
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 元素个数
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">empty&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 是否为空
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// 随机访问（无边界检查）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">at&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 随机访问（边界检查）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">front&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">back&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 首/尾元素
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">clear&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 清空
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1.2 deque —— 双端队列
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">deque&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">d&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push_front&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 头插
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push_back&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 尾插
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">pop_front&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 头删
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">pop_back&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 尾删
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">front&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">back&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 首/尾访问
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">empty&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1.3 list —— 双向链表
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">list&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">l&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">l&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push_front&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">l&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push_back&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">l&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">pop_front&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">l&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">pop_back&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">l&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">remove&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 删除所有值为2的元素
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">l&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">l&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">empty&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">l&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">front&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">l&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">back&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1.4 set —— 有序唯一集合
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">set&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">};&lt;/span> &lt;span class="c1">// 实际存储 {1,3,4}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 插入
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">erase&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 删除指定值
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">find&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 查找，返回迭代器，未找到返回 end()
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 计数（0或1）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">empty&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 允许重复元素用 multiset，接口基本相同
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1.5 map —— 有序键值对
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">map&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">string&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">ages&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ages&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s">&amp;#34;Alice&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">25&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 插入/修改；注意：若 key 不存在，[] 会自动插入一个默认值(0)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">ages&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s">&amp;#34;Bob&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ages&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">erase&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Alice&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 删除
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">ages&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">find&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Bob&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 查找，不想触发自动插入就用 find 而不是 []
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">ages&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Tom&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 计数
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">ages&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">ages&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">empty&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 允许重复key用 multimap，接口基本相同
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1.6 unordered_set —— 哈希无序集合
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">unordered_set&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">us&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">us&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">us&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">erase&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">us&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">find&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// O(1) 查找
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">us&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">us&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">us&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">empty&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1.7 unordered_map —— 哈希无序键值对
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">unordered_map&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">string&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">scores&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">scores&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s">&amp;#34;Tom&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">95&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">scores&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s">&amp;#34;Jerry&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">88&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">scores&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">erase&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Tom&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">scores&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">find&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Jerry&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">scores&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Bob&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">scores&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">scores&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">empty&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1.8 stack —— 栈（LIFO）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">stack&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">st&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">st&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 入栈
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">st&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">st&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">top&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 查看栈顶
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">st&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">pop&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 出栈（无返回值）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">st&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">empty&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">st&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1.9 priority_queue —— 优先队列（默认最大堆）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">priority_queue&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">pq&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">pq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">top&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 最大元素（10）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">pq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">pop&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 移除堆顶
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">pq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">empty&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">pq&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 想要最小堆：priority_queue&amp;lt;int, vector&amp;lt;int&amp;gt;, greater&amp;lt;int&amp;gt;&amp;gt; minPq;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1.10 pair —— 两个值的组合，不用专门定义 struct
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">pair&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">string&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">p1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s">&amp;#34;Alice&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">25&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p1&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">first&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// &amp;#34;Alice&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">p1&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">second&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 25
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">pair&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">p2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">make_pair&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 另一种构造写法
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1.11 string —— 字符串（可以当成 char 的容器，替代 char* + strcpy/strcat 那一套）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">string&lt;/span> &lt;span class="n">s2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;hello&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s2&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s">&amp;#34; world&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 拼接
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">s2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="n">s2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">length&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 长度（两个等价）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">s2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">empty&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// 下标访问
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">s2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">substr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 从下标1开始取3个字符，&amp;#34;ell&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">s2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">find&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;wor&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 查找子串，返回起始下标，找不到返回 string::npos
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">s2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">replace&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Hi&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 替换
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">s2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;!&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 追加
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">to_string&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">42&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// int -&amp;gt; string
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">stoi&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;123&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// string -&amp;gt; int
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">s2&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 要传给 C 函数（如 fopen）时转成 const char*
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1.12 array —— 固定大小数组（比原生C数组多了 .size() 等接口，但不能动态扩容）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">array&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">a&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">a&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">a&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">fill&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 全部填充为0
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="12-其他">1.2 其他&lt;/h2>
&lt;p>对所有容器通用&lt;/p></description></item><item><title>国测 claude</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/claude-code-vscode/</link><pubDate>Mon, 27 Jul 2026 19:03:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/claude-code-vscode/</guid><description>&lt;h1 id="vscode-claude-code-扩展配置">VSCode Claude Code 扩展配置&lt;/h1>
&lt;p>本文记录如何在 VSCode 中配置 Claude Code 扩展，接入第三方（海量/glm）模型服务，无需在本机维护环境变量，扩展启动时自动注入。&lt;/p>
&lt;h2 id="配置位置">配置位置&lt;/h2>
&lt;p>VSCode 用户级配置文件：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Windows&lt;/strong>：&lt;code>%APPDATA%\Code\User\settings.json&lt;/code>&lt;br>
（即 &lt;code>C:\Users\&amp;lt;用户名&amp;gt;\AppData\Roaming\Code\User\settings.json&lt;/code>）&lt;/li>
&lt;li>&lt;strong>macOS&lt;/strong>：&lt;code>~/Library/Application Support/Code/User/settings.json&lt;/code>&lt;/li>
&lt;li>&lt;strong>Linux&lt;/strong>：&lt;code>~/.config/Code/User/settings.json&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>打开方式：VSCode 中按 &lt;code>Ctrl + ,&lt;/code> 打开设置 → 右上角「打开设置 (JSON)」图标，或直接 &lt;code>Ctrl + Shift + P&lt;/code> 输入 &lt;code>Preferences: Open User Settings (JSON)&lt;/code>。&lt;/p>
&lt;h2 id="完整配置">完整配置&lt;/h2>
&lt;p>将以下内容合并进 &lt;code>settings.json&lt;/code>（注意 JSON 语法，最后一项末尾不要多逗号）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;claudeCode.environmentVariables&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;ANTHROPIC_BASE_URL&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;value&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http://172.16.105.104:3000&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;ANTHROPIC_AUTH_TOKEN&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;value&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;sk-hR1tQQloyPW0ax9b7404D51285Ae4737A118457535Fc33Ae&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;ANTHROPIC_MODEL&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;value&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;glm-5.2&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;ANTHROPIC_DEFAULT_OPUS_MODEL&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;value&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;glm-5.2&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;ANTHROPIC_DEFAULT_SONNET_MODEL&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;value&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;glm-5.2&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;ANTHROPIC_DEFAULT_HAIKU_MODEL&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;value&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;glm-5&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;CLAUDE_CODE_SUBAGENT_MODEL&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;value&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;glm-5&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;CLAUDE_CODE_EFFORT_LEVEL&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;value&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;max&amp;#34;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;claudeCode.preferredLocation&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;panel&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="环境变量说明">环境变量说明&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">变量名&lt;/th>
&lt;th style="text-align: left">作用&lt;/th>
&lt;th style="text-align: left">说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">&lt;code>ANTHROPIC_BASE_URL&lt;/code>&lt;/td>
&lt;td style="text-align: left">API 基础地址&lt;/td>
&lt;td style="text-align: left">指向第三方中转服务（兼容 Anthropic 协议）。海量外网网关示例：&lt;code>http://172.16.105.104:3000&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>ANTHROPIC_AUTH_TOKEN&lt;/code>&lt;/td>
&lt;td style="text-align: left">鉴权令牌&lt;/td>
&lt;td style="text-align: left">中转服务下发的 &lt;code>sk-xxx&lt;/code>，等价于官方的 API Key&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>ANTHROPIC_MODEL&lt;/code>&lt;/td>
&lt;td style="text-align: left">默认模型&lt;/td>
&lt;td style="text-align: left">主对话使用的模型&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>ANTHROPIC_DEFAULT_OPUS_MODEL&lt;/code>&lt;/td>
&lt;td style="text-align: left">Opus 档模型&lt;/td>
&lt;td style="text-align: left">覆盖官方 Opus 映射，通常设为最强模型&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>ANTHROPIC_DEFAULT_SONNET_MODEL&lt;/code>&lt;/td>
&lt;td style="text-align: left">Sonnet 档模型&lt;/td>
&lt;td style="text-align: left">覆盖官方 Sonnet 映射，日常主力&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>ANTHROPIC_DEFAULT_HAIKU_MODEL&lt;/code>&lt;/td>
&lt;td style="text-align: left">Haiku 档模型&lt;/td>
&lt;td style="text-align: left">覆盖官方 Haiku 映射，轻量快模型，用于补全/摘要&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>CLAUDE_CODE_SUBAGENT_MODEL&lt;/code>&lt;/td>
&lt;td style="text-align: left">子 Agent 模型&lt;/td>
&lt;td style="text-align: left">Task/Explore 等子任务使用的模型，建议用快模型省钱&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>CLAUDE_CODE_EFFORT_LEVEL&lt;/code>&lt;/td>
&lt;td style="text-align: left">推理强度&lt;/td>
&lt;td style="text-align: left">&lt;code>max&lt;/code> 表示最高推理强度（思考最深），可选 &lt;code>low/medium/high/max&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>扩展项 &lt;code>claudeCode.preferredLocation&lt;/code>：控制 Claude Code 面板的默认停靠位置，可选 &lt;code>panel&lt;/code>（底部面板）或 &lt;code>editor&lt;/code>（作为编辑器标签页）。&lt;/p></description></item><item><title>ai</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/ai/</link><pubDate>Fri, 03 Jul 2026 17:45:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/ai/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 角色&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">你是一名 PostgreSQL &lt;span class="m">16&lt;/span> 内核开发工程师，精通 src/backend/access/transam 及相关模块源码。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 约束&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 所有回答必须严格基于 PostgreSQL &lt;span class="m">16&lt;/span> Release 源码。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 解释机制时，必须引用具体的 .c/.h 文件路径和关键函数名。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 涉及数据结构时，请给出 struct 定义所在的头文件及字段含义。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 禁止使用“可能”、“通常”等模糊词汇描述内核行为；若不确定或版本不符，请明确告知。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">5. 代码片段必须标注来源文件及大致行号范围（或函数上下文）。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 当前任务&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 请梳理 XactBegin&lt;span class="o">()&lt;/span> 到 XactCommit&lt;span class="o">()&lt;/span> 的核心调用链，重点说明 CriticalSection 的作用。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 解释 PG16 中 clog &lt;span class="o">(&lt;/span>pg_xact&lt;span class="o">)&lt;/span> 的写入与刷盘时机，结合 TransactionIdSetPageStatus 函数分析。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- MVCC 快照获取逻辑在 GetSnapshotData 中是如何与活跃事务列表交互的？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 两阶段提交 &lt;span class="o">(&lt;/span>2PC&lt;span class="o">)&lt;/span> 在 PG16 中的状态持久化流程是什么？涉及哪些 WAL record 类型？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 输出格式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 核心流程图/调用链（文字描述即可）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 关键源码位置（文件:函数）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 设计意图与权衡（Why it is implemented this way）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 相关 GUC 参数及其对代码路径的影响
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>工具 硬件资源</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/hardware-resource/</link><pubDate>Fri, 29 May 2026 16:57:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/hardware-resource/</guid><description>&lt;h1 id="1-磁盘">1 磁盘&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 各文件夹大小&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">du -sh ./* &lt;span class="p">|&lt;/span> sort -hr
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>claude</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/claude/</link><pubDate>Fri, 06 Mar 2026 17:18:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/claude/</guid><description>&lt;h1 id="安装">安装&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">wget https://unofficial-builds.nodejs.org/download/release/v20.18.1/node-v20.18.1-linux-x64-glibc-217.tar.xz
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tar -Jxvf node-v20.18.1-linux-x64-glibc-217.tar.xz
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mv node-v20.18.1-linux-x64-glibc-217 node-20
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">touch envn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export NODEHOME=`pwd`/node-20
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export PATH=$NODEHOME/bin:$PATH
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export LD_LIBRARY_PATH=$NODEHOME/lib:$LD_LIBRARY_PATH
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">&amp;#39;&lt;/span> &amp;gt; envn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">source&lt;/span> envn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir npm-global
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">npm config &lt;span class="nb">set&lt;/span> prefix &lt;span class="sb">`&lt;/span>&lt;span class="nb">pwd&lt;/span>&lt;span class="sb">`&lt;/span>/npm-global
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">npm config &lt;span class="nb">set&lt;/span> prefix &lt;span class="nv">$NODEHOME&lt;/span>/npm-global
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;export PATH=$NODEHOME/../npm-global/bin:$PATH&amp;#39;&lt;/span> &amp;gt;&amp;gt; envn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">source&lt;/span> envn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">npm pack @anthropic-ai/claude-code
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">npm install -g ./anthropic-ai-claude-code-2.1.162.tgz
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude --version
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">https://www.tapd.cn/43100420/markdown_wikis/show/#1143100420001007544
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_BASE_URL&lt;/span>&lt;span class="o">=&lt;/span>https://api.deepseek.com/anthropic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_AUTH_TOKEN&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;sk-e435fe4629934fc892c226fc26d7ac92&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-pro&lt;span class="o">[&lt;/span>1m&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_OPUS_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-pro&lt;span class="o">[&lt;/span>1m&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_SONNET_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-pro&lt;span class="o">[&lt;/span>1m&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_HAIKU_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-flash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">CLAUDE_CODE_SUBAGENT_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-flash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">CLAUDE_CODE_EFFORT_LEVEL&lt;/span>&lt;span class="o">=&lt;/span>max
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 内网&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_BASE_URL&lt;/span>&lt;span class="o">=&lt;/span>http://172.16.99.137:8081
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_AUTH_TOKEN&lt;/span>&lt;span class="o">=&lt;/span>sk-q49Joop5Yz2BuS1ZPBPWJuCvwnS5elwKy9nP7PaLSi6fWrdy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-pro&lt;span class="o">[&lt;/span>1m&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_OPUS_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-pro&lt;span class="o">[&lt;/span>1m&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_SONNET_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-pro&lt;span class="o">[&lt;/span>1m&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_HAIKU_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-flash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">CLAUDE_CODE_SUBAGENT_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-flash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">CLAUDE_CODE_EFFORT_LEVEL&lt;/span>&lt;span class="o">=&lt;/span>max
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 内网 glm&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_BASE_URL&lt;/span>&lt;span class="o">=&lt;/span>http://172.16.99.137:8081
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_AUTH_TOKEN&lt;/span>&lt;span class="o">=&lt;/span>sk-q49Joop5Yz2BuS1ZPBPWJuCvwnS5elwKy9nP7PaLSi6fWrdy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_MODEL&lt;/span>&lt;span class="o">=&lt;/span>glm-5.2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_OPUS_MODEL&lt;/span>&lt;span class="o">=&lt;/span>glm-5.2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_SONNET_MODEL&lt;/span>&lt;span class="o">=&lt;/span>glm-5.2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_HAIKU_MODEL&lt;/span>&lt;span class="o">=&lt;/span>glm-5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">CLAUDE_CODE_SUBAGENT_MODEL&lt;/span>&lt;span class="o">=&lt;/span>glm-5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">CLAUDE_CODE_EFFORT_LEVEL&lt;/span>&lt;span class="o">=&lt;/span>max
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 外网： http://172.16.105.104:3000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_BASE_URL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;https://api.deepseek.com/anthropic&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_AUTH_TOKEN &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;sk-e435fe4629934fc892c226fc26d7ac92&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;deepseek-v4-flash&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_DEFAULT_OPUS_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;deepseek-v4-flash&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_DEFAULT_SONNET_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;deepseek-v4-flash&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_DEFAULT_HAIKU_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;deepseek-v4-flash&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:CLAUDE_CODE_SUBAGENT_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;deepseek-v4-flash&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:CLAUDE_CODE_EFFORT_LEVEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;max&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 外网 海量&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_BASE_URL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;http://172.16.105.104:3000&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_AUTH_TOKEN &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;sk-q49Joop5Yz2BuS1ZPBPWJuCvwnS5elwKy9nP7PaLSi6fWrdy&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;glm-5.2&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_DEFAULT_OPUS_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;glm-5.2&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_DEFAULT_SONNET_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;glm-5.2&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_DEFAULT_HAIKU_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;glm-5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:CLAUDE_CODE_SUBAGENT_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;glm-5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:CLAUDE_CODE_EFFORT_LEVEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;max&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_BASE_URL&lt;/span>&lt;span class="o">=&lt;/span>http://172.16.105.104:3000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_AUTH_TOKEN&lt;/span>&lt;span class="o">=&lt;/span>sk-q49Joop5Yz2BuS1ZPBPWJuCvwnS5elwKy9nP7PaLSi6fWrdy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_MODEL&lt;/span>&lt;span class="o">=&lt;/span>glm-5.2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_OPUS_MODEL&lt;/span>&lt;span class="o">=&lt;/span>glm-5.2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_SONNET_MODEL&lt;/span>&lt;span class="o">=&lt;/span>glm-5.2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_HAIKU_MODEL&lt;/span>&lt;span class="o">=&lt;/span>glm-5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">CLAUDE_CODE_SUBAGENT_MODEL&lt;/span>&lt;span class="o">=&lt;/span>glm-5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">CLAUDE_CODE_EFFORT_LEVEL&lt;/span>&lt;span class="o">=&lt;/span>max
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 外网 海量&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_BASE_URL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;http://172.16.105.104:3000&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_AUTH_TOKEN &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;sk-q49Joop5Yz2BuS1ZPBPWJuCvwnS5elwKy9nP7PaLSi6fWrdy&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;deepseek-v4-flash&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_DEFAULT_OPUS_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;deepseek-v4-flash&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_DEFAULT_SONNET_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;deepseek-v4-flash&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:ANTHROPIC_DEFAULT_HAIKU_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;deepseek-v4-flash&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:CLAUDE_CODE_SUBAGENT_MODEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;deepseek-v4-flash&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env&lt;/span>:CLAUDE_CODE_EFFORT_LEVEL &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;max&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_BASE_URL&lt;/span>&lt;span class="o">=&lt;/span>http://172.16.105.104:3000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_AUTH_TOKEN&lt;/span>&lt;span class="o">=&lt;/span>sk-q49Joop5Yz2BuS1ZPBPWJuCvwnS5elwKy9nP7PaLSi6fWrdy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-pro&lt;span class="o">[&lt;/span>1m&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_OPUS_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-pro&lt;span class="o">[&lt;/span>1m&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_SONNET_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-pro&lt;span class="o">[&lt;/span>1m&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">ANTHROPIC_DEFAULT_HAIKU_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-flash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">CLAUDE_CODE_SUBAGENT_MODEL&lt;/span>&lt;span class="o">=&lt;/span>deepseek-v4-flash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">CLAUDE_CODE_EFFORT_LEVEL&lt;/span>&lt;span class="o">=&lt;/span>max
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>System.Environment&lt;span class="o">]&lt;/span>::SetEnvironmentVariable&lt;span class="o">(&lt;/span>&lt;span class="s2">&amp;#34;ANTHROPIC_BASE_URL&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;https://api.deepseek.com/anthropic&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;User&amp;#34;&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>System.Environment&lt;span class="o">]&lt;/span>::SetEnvironmentVariable&lt;span class="o">(&lt;/span>&lt;span class="s2">&amp;#34;ANTHROPIC_AUTH_TOKEN&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;sk-e435fe4629934fc892c226fc26d7ac92&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;User&amp;#34;&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>System.Environment&lt;span class="o">]&lt;/span>::SetEnvironmentVariable&lt;span class="o">(&lt;/span>&lt;span class="s2">&amp;#34;ANTHROPIC_MODEL&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;deepseek-v4-pro[1m]&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;User&amp;#34;&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>System.Environment&lt;span class="o">]&lt;/span>::SetEnvironmentVariable&lt;span class="o">(&lt;/span>&lt;span class="s2">&amp;#34;ANTHROPIC_DEFAULT_OPUS_MODEL&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;deepseek-v4-pro[1m]&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;User&amp;#34;&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>System.Environment&lt;span class="o">]&lt;/span>::SetEnvironmentVariable&lt;span class="o">(&lt;/span>&lt;span class="s2">&amp;#34;ANTHROPIC_DEFAULT_SONNET_MODEL&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;deepseek-v4-pro[1m]&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;User&amp;#34;&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>System.Environment&lt;span class="o">]&lt;/span>::SetEnvironmentVariable&lt;span class="o">(&lt;/span>&lt;span class="s2">&amp;#34;ANTHROPIC_DEFAULT_HAIKU_MODEL&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;deepseek-v4-flash&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;User&amp;#34;&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>System.Environment&lt;span class="o">]&lt;/span>::SetEnvironmentVariable&lt;span class="o">(&lt;/span>&lt;span class="s2">&amp;#34;CLAUDE_CODE_SUBAGENT_MODEL&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;deepseek-v4-flash&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;User&amp;#34;&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>System.Environment&lt;span class="o">]&lt;/span>::SetEnvironmentVariable&lt;span class="o">(&lt;/span>&lt;span class="s2">&amp;#34;CLAUDE_CODE_EFFORT_LEVEL&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;max&amp;#34;&lt;/span>, &lt;span class="s2">&amp;#34;User&amp;#34;&lt;/span>&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装nodejs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">yum install -y nodejs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir ~/.npm-global
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">npm config &lt;span class="nb">set&lt;/span> prefix &lt;span class="s1">&amp;#39;~/.npm-global&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;export PATH=~/.npm-global/bin:$PATH&amp;#39;&lt;/span> &amp;gt;&amp;gt; ~/.bashrc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">source&lt;/span> ~/.bashrc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装claude&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">npm install -g @anthropic-ai/claude-code
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 验证&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude --version
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> /data/postgresql17
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 5. 启动 Claude Code 并进行首次认证&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 运行后，终端会提供一个链接，在浏览器中完成账号授权即可&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 6. (可选但推荐) 生成项目记忆文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 在 Claude 交互界面中，输入以下命令，它会分析项目并生成 CLAUDE.md 文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/init
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># linux 使用代理&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -L https://github.com/MetaCubeX/mihomo/releases/latest/download/mihomo-linux-amd64-compatible.gz &lt;span class="p">|&lt;/span> gunzip &amp;gt; /usr/local/bin/mihomo
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod +x /usr/local/bin/mihomo
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir -p /etc/clash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -o /etc/clash/config.yaml http://43.135.139.219:9999/clash.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. 启动 Clash&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">nohup mihomo -f /etc/clash/config.yaml &amp;gt; /var/log/clash.log 2&amp;gt;&lt;span class="p">&amp;amp;&lt;/span>&lt;span class="m">1&lt;/span> &lt;span class="p">&amp;amp;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. 设置代理环境变量（Clash 默认 mixed-port 7890）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">http_proxy&lt;/span>&lt;span class="o">=&lt;/span>http://127.0.0.1:7890
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">https_proxy&lt;/span>&lt;span class="o">=&lt;/span>http://127.0.0.1:7890
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 5. 测试&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -I https://www.google.com
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git config --global user.name &lt;span class="s2">&amp;#34;shenkun&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git config --global user.email &lt;span class="s2">&amp;#34;shenkun@bupt.cn&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh-keygen -t rsa -C &lt;span class="s2">&amp;#34;shenkun@bupt.cn&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat ~/.ssh/id_rsa
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">yum install proxychains-ng -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;socks5 10.255.255.254 1080&amp;#34;&lt;/span> &amp;gt;&amp;gt; /etc/proxychains.conf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># windows11 安装clash&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">https://github.com/clash-verge-rev/clash-verge-rev/releases
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">yum install -y shadowsocks-libev
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat &amp;gt; /etc/shadowsocks-libev/client.json &lt;span class="s">&amp;lt;&amp;lt; &amp;#39;EOF&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">{
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">&amp;#34;server&amp;#34;: &amp;#34;43.135.139.219&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">&amp;#34;server_port&amp;#34;: 443,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">&amp;#34;local_address&amp;#34;: &amp;#34;127.0.0.1&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">&amp;#34;local_port&amp;#34;: 1080,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">&amp;#34;password&amp;#34;: &amp;#34;gauss@123&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">&amp;#34;method&amp;#34;: &amp;#34;aes-256-gcm&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ss-local -c /etc/shadowsocks-libev/client.json -f /var/run/ss-local.pid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">https_proxy&lt;/span>&lt;span class="o">=&lt;/span>socks5://127.0.0.1:1080
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># githup&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="使用">使用&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 启动&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude --resume &lt;span class="c1"># 恢复最近一次对话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude --continue &lt;span class="c1"># 继续上一次对话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude --model &amp;lt;name&amp;gt; &lt;span class="c1"># 指定模型&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude --dangerously-skip-permissions &lt;span class="c1"># 跳过所有权限确认&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 命令&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/clear &lt;span class="c1"># 清楚所有对话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/compact &lt;span class="c1"># 压缩上下文，保留摘要&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/rewind &lt;span class="c1"># 回滚上一次对话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/memory &lt;span class="c1"># 编辑记忆文件，记住偏好&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/resume &lt;span class="c1"># 恢复历史会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/context &lt;span class="c1"># 显示上下文窗口使用量&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 项目&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/init 初始化项目，生成CLAUDE.md
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/review &lt;span class="c1"># 代码审查&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/commit &lt;span class="c1"># 提交&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 环境&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/config &lt;span class="c1"># 调整主题、模型等&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/model &lt;span class="o">[&lt;/span>name&lt;span class="o">]&lt;/span> &lt;span class="c1"># 切换模型&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/permissions &lt;span class="c1"># 工具权限白名单&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/doctor &lt;span class="c1"># 检查环境&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/mcp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/cost &lt;span class="c1"># token用量和费用&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/usage
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 扩展&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/skill
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/自定义skill
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 快捷键&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 快捷键 &lt;span class="p">|&lt;/span> 功能 &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> :--- &lt;span class="p">|&lt;/span> :--- &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> &lt;span class="sb">`&lt;/span>Shift + Tab&lt;span class="sb">`&lt;/span> &lt;span class="p">|&lt;/span> 循环切换三种模式：计划模式 → 默认模式 → 自动编辑模式 &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> &lt;span class="sb">`&lt;/span>!command&lt;span class="sb">`&lt;/span> &lt;span class="p">|&lt;/span> 直接在终端执行 bash 命令（不发给 AI） &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> &lt;span class="sb">`&lt;/span>Ctrl + B&lt;span class="sb">`&lt;/span> &lt;span class="p">|&lt;/span> 将阻塞的进程放到后台，继续对话 &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> &lt;span class="sb">`&lt;/span>Esc Esc&lt;span class="sb">`&lt;/span> &lt;span class="p">|&lt;/span> 双击 Esc 等同于 &lt;span class="sb">`&lt;/span>/rewind&lt;span class="sb">`&lt;/span> 回滚 &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> &lt;span class="sb">`&lt;/span>Ctrl + V&lt;span class="sb">`&lt;/span> &lt;span class="p">|&lt;/span> 粘贴图片到对话框 &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> &lt;span class="sb">`&lt;/span>Option/Ctrl + Enter&lt;span class="sb">`&lt;/span> &lt;span class="p">|&lt;/span> 输入框换行（Enter 是直接发送） &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">模型名称&lt;/th>
&lt;th style="text-align: left">厂商&lt;/th>
&lt;th style="text-align: left">发布时间&lt;/th>
&lt;th style="text-align: left">核心亮点（精简）&lt;/th>
&lt;th style="text-align: left">定位/优势场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">GPT-5.6 (Sol/Terra/Luna)&lt;/td>
&lt;td style="text-align: left">OpenAI&lt;/td>
&lt;td style="text-align: left">2026.07.09&lt;/td>
&lt;td style="text-align: left">7月9日刚全球开放；三档分层+速度拨盘；Codex与ChatGPT合一&lt;/td>
&lt;td style="text-align: left">全能旗舰、超级智能体&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">GPT-5.5&lt;/td>
&lt;td style="text-align: left">OpenAI&lt;/td>
&lt;td style="text-align: left">2026.04.24&lt;/td>
&lt;td style="text-align: left">首个从零重训基础模型；100万tokens；MoE+Verifier架构&lt;/td>
&lt;td style="text-align: left">真实工作流、编程调试&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">DeepSeek-V4 (Pro/Flash)&lt;/td>
&lt;td style="text-align: left">深度求索&lt;/td>
&lt;td style="text-align: left">2026.04.24&lt;/td>
&lt;td style="text-align: left">万亿参数MoE开源；百万token原生上下文；成本仅OpenAI 1/100&lt;/td>
&lt;td style="text-align: left">开源性价比之王、Agent&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Qwen3.7-Max&lt;/td>
&lt;td style="text-align: left">阿里巴巴&lt;/td>
&lt;td style="text-align: left">2026.05.20&lt;/td>
&lt;td style="text-align: left">国产Arena盲测第一；全域思考模式；Agentic Coding全球前三&lt;/td>
&lt;td style="text-align: left">国产旗舰、智能体编程&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Claude Opus 4.7/4.8&lt;/td>
&lt;td style="text-align: left">Anthropic&lt;/td>
&lt;td style="text-align: left">2026 Q2&lt;/td>
&lt;td style="text-align: left">代码质量最优；长文本推理首选；WebDev Arena排名第一&lt;/td>
&lt;td style="text-align: left">编程审校、深度推理&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Gemini 3.5 Pro&lt;/td>
&lt;td style="text-align: left">Google&lt;/td>
&lt;td style="text-align: left">2026.06&lt;/td>
&lt;td style="text-align: left">Artificial Analysis智能指数登顶；集成计算机使用(CU)能力&lt;/td>
&lt;td style="text-align: left">复杂推理、多模态科研&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Grok 4 / 4.5&lt;/td>
&lt;td style="text-align: left">xAI&lt;/td>
&lt;td style="text-align: left">2026.05-07&lt;/td>
&lt;td style="text-align: left">实时接入X平台；编码与Agent能力持续强化；百亿~千亿参数&lt;/td>
&lt;td style="text-align: left">实时信息、社交分析&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Kimi-K2.6&lt;/td>
&lt;td style="text-align: left">月之暗面&lt;/td>
&lt;td style="text-align: left">2026 H1&lt;/td>
&lt;td style="text-align: left">长文本办公统治级；JSON输出稳定；指令遵循能力强&lt;/td>
&lt;td style="text-align: left">办公自动化、Agent&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">GLM-5.1&lt;/td>
&lt;td style="text-align: left">智谱AI&lt;/td>
&lt;td style="text-align: left">2026 Q2&lt;/td>
&lt;td style="text-align: left">国产第一梯队；编程能力进入Top7；综合能力稳居前列&lt;/td>
&lt;td style="text-align: left">通用对话、编程辅助&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">豆包 2.1 Pro&lt;/td>
&lt;td style="text-align: left">字节跳动&lt;/td>
&lt;td style="text-align: left">2026.06&lt;/td>
&lt;td style="text-align: left">中文口语最自然；移动端交互最佳；多模态细节强&lt;/td>
&lt;td style="text-align: left">C端用户、内容创作&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Meta Muse Spark 1.1&lt;/td>
&lt;td style="text-align: left">Meta&lt;/td>
&lt;td style="text-align: left">2026.07&lt;/td>
&lt;td style="text-align: left">首次开放Model API；正面争夺企业开发者市场&lt;/td>
&lt;td style="text-align: left">企业开发、开源生态&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Llama 4&lt;/td>
&lt;td style="text-align: left">Meta&lt;/td>
&lt;td style="text-align: left">2026(预计)&lt;/td>
&lt;td style="text-align: left">开源生态标杆；多模态原生；社区微调最丰富&lt;/td>
&lt;td style="text-align: left">开源基座、定制微调&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>工具 python</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/python/</link><pubDate>Mon, 29 Dec 2025 14:31:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/python/</guid><description>&lt;ol>
&lt;li>
&lt;p>查看python安装路径&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">python -c &lt;span class="s2">&amp;#34;import sys, os; print(os.path.dirname(sys.executable))&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>python下载pgk&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol></description></item><item><title>工具 gdb</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/gdb/</link><pubDate>Wed, 15 Oct 2025 16:41:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/gdb/</guid><description>&lt;ol>
&lt;li>
&lt;p>查看某个进程占用的内存&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ps -p &lt;span class="m">17286&lt;/span> --no-headers -o pid,comm,rss,%mem &lt;span class="p">|&lt;/span> awk &lt;span class="s1">&amp;#39;{printf &amp;#34;%-8s %-20s %8.2f MB %5s%%\n&amp;#34;, $1, $2, $3/1024, $4}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>gdb调试进程或coredump文件时，变量取值出现’optimized out’时，关闭编译优化&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 以编译PG为例：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">configure --enable-debug --disable-optimizations &lt;span class="nv">CFLAGS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;-g -O0 -fno-inline -fno-omit-frame-pointer&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>gdb启动调试阶段，自动执行命令&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">touch ~/.gdbinit
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;handle SIGUSR2 nostop noprint&amp;#34;&lt;/span> &amp;gt;&amp;gt; ~/.gdbinit
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>判断编译选项&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">readelf --debug-dump&lt;span class="o">=&lt;/span>info &lt;span class="sb">`&lt;/span>which bin_name&lt;span class="sb">`&lt;/span> &lt;span class="p">|&lt;/span> grep -E &lt;span class="s1">&amp;#39;DW_AT_producer.*O[0-9]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol></description></item><item><title>工具 git</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/git/</link><pubDate>Wed, 24 Sep 2025 16:35:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/git/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git log --author&lt;span class="o">=&lt;/span>shenkun --oneline
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>
&lt;p>x86&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git status -uno &lt;span class="p">|&lt;/span> awk &lt;span class="s1">&amp;#39;{if (NR&amp;gt;1) print $3}&amp;#39;&lt;/span> &lt;span class="p">|&lt;/span> grep src &lt;span class="p">|&lt;/span> xargs -I &lt;span class="o">{}&lt;/span> git add &lt;span class="o">{}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>arm&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git status -uno &lt;span class="p">|&lt;/span> grep modified &lt;span class="p">|&lt;/span> awk &lt;span class="s1">&amp;#39;{if (NR&amp;gt;1) print $2}&amp;#39;&lt;/span> &lt;span class="p">|&lt;/span> xargs -I &lt;span class="o">{}&lt;/span> git add &lt;span class="o">{}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git tag -l
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git ls-remote --tags origin
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git fetch --tags
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>工具 tcpdump</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/tcpdump/</link><pubDate>Thu, 04 Sep 2025 15:22:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/tcpdump/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">tcpdump -i any -w ./vsql.pcap &lt;span class="s1">&amp;#39;tcp port 5432&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>工具 多线程 thread</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/thread/</link><pubDate>Thu, 22 May 2025 19:29:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/thread/</guid><description>&lt;h1 id="1-多线程框架">1 多线程框架&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">gcc thd.c -lpthread -o thd
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdio.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdlib.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;string.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdbool.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;pthread.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;unistd.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;semaphore.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">bool&lt;/span> &lt;span class="n">prtlog&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#define ASSERT(cond) \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp"> if (!(cond)) {printf(&amp;#34;ASSERT | file: %s line: %d func: %s\n&amp;#34;, __FILE__, __LINE__, __FUNCTION__); exit(-1);}
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#define LOG(thdctl, fmt, ...) \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp"> do { \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp"> if (prtlog) { \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp"> char data_[2048]; \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp"> snprintf(data_, 2048, (fmt), ##__VA_ARGS__); \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp"> thdctl != NULL ? \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp"> printf(&amp;#34; &amp;gt;%-3d %s\n&amp;#34;, ((ThdCtl *)(thdctl))-&amp;gt;id, data_) : \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp"> printf(&amp;#34;%s\n&amp;#34;, data_); \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp"> } \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp"> } while (0)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm">/* ---------------------------------------------------------------------- */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">typedef&lt;/span> &lt;span class="k">struct&lt;/span> &lt;span class="n">ThdCtl&lt;/span> &lt;span class="n">ThdCtl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">typedef&lt;/span> &lt;span class="k">struct&lt;/span> &lt;span class="n">ThdData&lt;/span> &lt;span class="n">ThdData&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">typedef&lt;/span> &lt;span class="nf">void&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">ThdHookFunc&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">ThdCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">thdctl&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdData&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">struct&lt;/span> &lt;span class="n">ThdCtl&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/* thread info */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">stat&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">pthread_t&lt;/span> &lt;span class="n">thd&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">id&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/* thread function */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ThdHookFunc&lt;/span> &lt;span class="n">init_func&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ThdHookFunc&lt;/span> &lt;span class="n">exec_func&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ThdHookFunc&lt;/span> &lt;span class="n">exit_func&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ThdData&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/* thread control */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">bool&lt;/span> &lt;span class="n">iswait&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">sem_t&lt;/span> &lt;span class="n">wait&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">typedef&lt;/span> &lt;span class="k">struct&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">thdnum&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ThdCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">thdarr&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">10000&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span> &lt;span class="n">ProCtl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm">/* ---------------------------------------------------------------------- */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">multi_execute&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ThdHookFunc&lt;/span> &lt;span class="n">initfunc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdHookFunc&lt;/span> &lt;span class="n">execfunc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdHookFunc&lt;/span> &lt;span class="n">exitfunc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">thdnum&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdData&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">dataarr&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">typedef&lt;/span> &lt;span class="k">struct&lt;/span> &lt;span class="n">ThdData&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">id&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span> &lt;span class="n">ThdData&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">init&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ThdCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">thdctl&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdData&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">LOG&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">thdctl&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;init&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">thdctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">id&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">execute&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ThdCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">thdctl&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdData&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">LOG&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">thdctl&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;execute, id: %d&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">id&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">finish&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ThdCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">thdctl&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdData&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">LOG&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">thdctl&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;finish, id: %d&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">id&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ThdData&lt;/span> &lt;span class="n">datas&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">multi_execute&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">init&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">execute&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">finish&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">datas&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm">/* ---------------------------------------------------------------------- */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nf">thread_main&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">void&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">arg&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ThdCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">tctl&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">ThdCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">arg&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">tctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">init_func&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">tctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="nf">init_func&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">tctl&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">tctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/* wait to be wake up */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// LOG(tctl, &amp;#34;sleep&amp;#34;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">sem_wait&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">tctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">wait&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/* wake up now */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// LOG(tctl, &amp;#34;wakeup&amp;#34;);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">tctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">iswait&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/* ====== user funtion begin ========== */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">tctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">exec_func&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">tctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="nf">exec_func&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">tctl&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">tctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/* ====== user funtion finish ========== */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">tctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">exit_func&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">tctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="nf">exit_func&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">tctl&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">tctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ThdCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nf">create_thread&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ProCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">process&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdHookFunc&lt;/span> &lt;span class="n">initfunc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdHookFunc&lt;/span> &lt;span class="n">execfunc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdHookFunc&lt;/span> &lt;span class="n">exitfunc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">void&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">thddata&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">static&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">thdid&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ThdCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">t&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">ThdCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="nf">malloc&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ThdCtl&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">t&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">ASSERT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">false&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/* thread info */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">t&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">stat&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">t&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">thdid&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/* thread function */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">t&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">init_func&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">initfunc&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">t&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">exec_func&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">execfunc&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">t&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">exit_func&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">exitfunc&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">t&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">thddata&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">t&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">stat&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">pthread_create&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">t&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">thd&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">thread_main&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">t&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/* thread control */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">t&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">iswait&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">sem_init&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">t&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">wait&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">process&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">thdarr&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">process&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">thdnum&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">t&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">process&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">thdnum&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">t&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ProCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nf">create_process&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ProCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">pro&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">ProCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="nf">malloc&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ProCtl&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">ASSERT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pro&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pro&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">thdnum&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">memset&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pro&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">thdarr&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pro&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">thdarr&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">pro&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">multi_execute&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ThdHookFunc&lt;/span> &lt;span class="n">initfunc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdHookFunc&lt;/span> &lt;span class="n">execfunc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdHookFunc&lt;/span> &lt;span class="n">exitfunc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">thdnum&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ThdData&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">dataarr&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ProCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">pro&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">create_process&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">LOG&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">NULL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;init ------------------------&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">thdnum&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">create_thread&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pro&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">initfunc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">execfunc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">exitfunc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">dataarr&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">LOG&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">NULL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;execute ------------------------&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">pro&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">thdnum&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ThdCtl&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">tctl&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pro&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">thdarr&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">sem_post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">tctl&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">wait&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">pro&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">thdnum&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">pthread_join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pro&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">thdarr&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">thd&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">LOG&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">NULL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;finish ------------------------&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="2-多线程示例">2 多线程示例&lt;/h1></description></item><item><title>工具 配置新环境</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/new-machine/</link><pubDate>Fri, 24 Jan 2025 16:14:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/new-machine/</guid><description>&lt;ol start="0">
&lt;li>
&lt;p>设置bash&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">PS1&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;[\e[35;1m][\$(date +&amp;#39;%m-%d/%H:%M:%S&amp;#39;)][\e[36;1m]\w [\e[0m]\n&amp;gt; &amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>安装code-servels&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://blog.zhaokeyong.cn/archives/CentOScode-server">https://blog.zhaokeyong.cn/archives/CentOScode-server&lt;/a>&lt;br>
安装3.4版本，方便&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1 从本地机器上，找到code-server所在文件夹&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> /home/shenkun/vscode
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir allpkg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 放插件的目录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cp -r ~/.local allpkg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cp -r ./code-server allpkg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tar -zcvf allpkg.tar.gz allpkg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> /home/shenkun/vscode
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tar -zxvf allpkg.tar.gz
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mv allpkg/code-server ./
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rm -rf ~/.local/share/code-server/*
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mv allpkg/.local/share/code-server/* ~/.local/share/code-server
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">nohup ./code-server &lt;span class="p">&amp;amp;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 设置配置文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">vi ~/.config/code-server/config.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">bind-addr: 0.0.0.0:3000
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">auth: password
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">password: password
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cert: &lt;span class="nb">false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">nohup ./code-server &lt;span class="p">&amp;amp;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>常用插件：&lt;/p>
&lt;/li>
&lt;li>
&lt;p>c/c++&lt;/p>
&lt;/li>
&lt;li>
&lt;p>gitlens&lt;/p>
&lt;/li>
&lt;li>
&lt;p>markdown preview enhanced&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>安装 oracle&lt;/p></description></item><item><title>tool.flex.词法解析工具</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/flex/</link><pubDate>Tue, 21 Jan 2025 13:55:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/flex/</guid><description>&lt;p>目录：&lt;/p>
&lt;ol>
&lt;li>&lt;a href="#1-%E6%A6%82%E8%BF%B0">1 概述&lt;/a>&lt;/li>
&lt;li>&lt;a href="#2-flex">2 flex&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%E5%8F%82%E8%80%83%EF%BC%9A">参考：&lt;/a>&lt;/li>
&lt;/ol>
&lt;h1 id="1-概述">1 概述&lt;/h1>
&lt;p>&lt;strong>需求&lt;/strong>&lt;br>
判断字符串，是否满足规定的规则。&lt;/p>
&lt;p>&lt;strong>示例&lt;/strong>&lt;br>
字符串：&lt;/p>
&lt;blockquote>
&lt;p>‘abc’, ‘a1’, ‘a+’, …&lt;/p>&lt;/blockquote>
&lt;p>规则：&lt;/p>
&lt;blockquote>
&lt;p>字符串中只包含字母&lt;/p>&lt;/blockquote>
&lt;p>编码：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="cm">/* 省略 */&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>问题：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>复杂性&lt;/strong>：在字符串较长，规则繁多时，判断逻辑将会很复杂，编码工作量大&lt;/p>&lt;/blockquote>
&lt;p>方案：&lt;/p>
&lt;blockquote>
&lt;ul>
&lt;li>通过通用的&lt;strong>正则表达式&lt;/strong>制定规则&lt;/li>
&lt;li>通过很多开源或非开源的词法解析工具，实现判断逻辑。&lt;/li>
&lt;/ul>&lt;/blockquote>
&lt;p>正则表达式：&lt;/p>
&lt;blockquote>
&lt;p>[a-zA-Z]+ ： 字符串中只包含字母&lt;/p>&lt;/blockquote>
&lt;p>如此，我们仅需简单制定正则表达式，通过第三方词法解析工具实现判断逻辑。&lt;/p>
&lt;h1 id="2-flex">2 flex&lt;/h1>
&lt;p>&lt;strong>1 词法解析&lt;/strong>&lt;br>
词法解析工具有很多，本文仅介绍flex。&lt;br>
flex编写的规则文件，后缀为.l&lt;/p>
&lt;p>&lt;strong>2 编译流程&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;ol>
&lt;li>编写 [规则.l] 文件&lt;/li>
&lt;li>通过flex，将 [规则.l] 文件，转换为 [规则.c] 文件&lt;/li>
&lt;li>将 [规则.c] 文件，以其他文件一起，正常编译即可&lt;/li>
&lt;/ol>&lt;/blockquote>
&lt;p>&lt;strong>3 文件格式&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="o">%&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm">/* include */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">%&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm">/* define */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">%%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rule&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="nf">code&lt;/span>&lt;span class="p">();}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">%%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">usercode&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">yylex&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>4 正则表达式&lt;/strong>&lt;br>
&lt;strong>单字符&lt;/strong>&lt;/p></description></item><item><title>tool.markdown.轻量级语言语法</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/markdown/</link><pubDate>Tue, 21 Jan 2025 13:55:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/markdown/</guid><description>&lt;blockquote>
&lt;p>说明：原始markdow语法见本文底部&lt;/p>&lt;/blockquote>
&lt;p>目录：&lt;/p>
&lt;ol>
&lt;li>&lt;a href="#%E6%A0%87%E9%A2%98%EF%BC%9A1">标题：1&lt;/a>
&lt;ol>
&lt;li>&lt;a href="#%E6%A0%87%E9%A2%98%EF%BC%9A1-1">标题：1.1&lt;/a>
&lt;ol>
&lt;li>&lt;a href="#%E6%A0%87%E9%A2%98%EF%BC%9A1-1-1">标题：1.1.1&lt;/a>
&lt;ol>
&lt;li>&lt;a href="#%E6%A0%87%E9%A2%98%EF%BC%9A1-1-1-1">标题：1.1.1.1&lt;/a>
&lt;ol>
&lt;li>&lt;a href="#%E6%A0%87%E9%A2%98%EF%BC%9A1-1-1-1-1">标题：1.1.1.1.1&lt;/a>
&lt;ol>
&lt;li>&lt;a href="#%E6%A0%87%E9%A2%98%EF%BC%9A1-1-1-1-1-1">标题：1.1.1.1.1.1&lt;/a>&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ol>
&lt;p>加粗：&lt;strong>test&lt;/strong>&lt;br>
横线：&lt;del>test&lt;/del>&lt;br>
斜体：&lt;em>test&lt;/em>&lt;/p>
&lt;h1 id="标题1">标题：1&lt;/h1>
&lt;h2 id="标题11">标题：1.1&lt;/h2>
&lt;h3 id="标题111">标题：1.1.1&lt;/h3>
&lt;h4 id="标题1111">标题：1.1.1.1&lt;/h4>
&lt;h5 id="标题11111">标题：1.1.1.1.1&lt;/h5>
&lt;h6 id="标题111111">标题：1.1.1.1.1.1&lt;/h6>
&lt;p>$~~$缩进&lt;/p>
&lt;p>节点：&lt;/p>
&lt;ul>
&lt;li>a&lt;/li>
&lt;li>b
&lt;ul>
&lt;li>ba&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>序号：&lt;/p>
&lt;ol>
&lt;li>a&lt;/li>
&lt;li>b
&lt;ol>
&lt;li>c&lt;/li>
&lt;li>d&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ol>
&lt;p>分割线&lt;/p>
&lt;hr>
&lt;p>链接：&lt;a href="http://www.baidu.com/" title="点我">点我&lt;/a>&lt;/p>
&lt;p>链接：&lt;a href="http://www.baidu.com/">[id]&lt;/a>&lt;br>
something&lt;br>
something&lt;/p>
&lt;p>图片：&lt;code>[![desc](/path/to/img.png)](http://www.baidu.com/ &amp;quot;desc&amp;quot;)&lt;/code>&lt;/p>
&lt;p>引用：&lt;/p>
&lt;blockquote>
&lt;p>line 1&lt;br>
line 2&lt;/p>&lt;/blockquote>
&lt;p>ada&lt;/p>
&lt;p>代码&lt;code>func(int a, int b)&lt;/code>&lt;/p>
&lt;p>代码块：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="n">def&lt;/span> &lt;span class="nf">func&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">func&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">c&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;abc&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">b&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>表格：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">c1&lt;/th>
&lt;th style="text-align: right">c2&lt;/th>
&lt;th style="text-align: center">c3&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">1&lt;/td>
&lt;td style="text-align: right">2&lt;/td>
&lt;td style="text-align: center">3&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">2&lt;/td>
&lt;td style="text-align: right">2&lt;/td>
&lt;td style="text-align: center">3&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>html转换：&lt;br>
♥&lt;/p>
&lt;p>分页符：&lt;/p>
&lt;p>[========]&lt;/p>
&lt;p>abc&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">目录：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 标题：1标题：1.1标题：1.1.1标题：1.1.1.1标题：1.1.1.1.1标题：1.1.1.1.1.1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">加粗：**test**
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">横线：~~test~~
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">斜体：*test*
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># 标题：1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>&lt;span class="gu">## 标题：1.1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">### 标题：1.1.1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">#### 标题：1.1.1.1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">##### 标题：1.1.1.1.1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">###### 标题：1.1.1.1.1.1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">$~~$
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">节点：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> a
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> b
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">-&lt;/span> ba
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">序号：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">1.&lt;/span> a
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">2.&lt;/span> b
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">1.&lt;/span> c
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">2.&lt;/span> d
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">分割线
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">------------
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">链接：[&lt;span class="nt">点我&lt;/span>](&lt;span class="na">http://www.baidu.com &amp;#34;点我&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">链接：[[id]][linkid]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">something
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">something
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[linkid]: http://www.baidu.com
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">图片：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[&lt;span class="nt">![desc&lt;/span>](&lt;span class="na">../../1.PNG&lt;/span>)](http://www.baidu.com &amp;#34;desc&amp;#34;)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">引用：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">&amp;gt; &lt;/span>&lt;span class="ge">line 1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="ge">&lt;/span>&lt;span class="k">&amp;gt; &lt;/span>&lt;span class="ge">line 2
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="ge">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ada
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">代码&lt;span class="sb">`func(int a, int b)`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">代码块：
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">def func(int a, int b)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> return 0;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">def func(a, b):
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> c = &amp;#34;abc&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> return a + b
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">表格：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| c1 | c2 | c3 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| :- | -: | :-: |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 1 | 2 | 3|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 2 | 2 |3|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">html转换：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="ni">&amp;amp;hearts;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">分页符：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[========]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">abc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>tool.webssh.网页版SSH工具</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/webssh/</link><pubDate>Tue, 21 Jan 2025 13:55:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/webssh/</guid><description>&lt;p>&lt;strong>感谢&lt;/strong>&lt;br>
开源项目：&lt;a href="https://gitee.com/careyjike_173/webssh">https://gitee.com/careyjike_173/webssh&lt;/a>&lt;/p></description></item><item><title>tool.yacc.语法解析工具</title><link>https://my-blog.j8465383071.workers.dev/posts/tools/yacc/</link><pubDate>Tue, 21 Jan 2025 13:55:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/tools/yacc/</guid><description>&lt;p>目录：&lt;/p>
&lt;ol>
&lt;li>&lt;a href="#1-%E6%A6%82%E8%BF%B0">1 概述&lt;/a>&lt;/li>
&lt;/ol>
&lt;h1 id="1-概述">1 概述&lt;/h1>
&lt;p>&lt;strong>需求&lt;/strong>&lt;br>
判断语法是否正确&lt;/p></description></item></channel></rss>