[{"data":1,"prerenderedAt":3415},["ShallowReactive",2],{"series:index":3,"content:\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter8-cprogramminginunix":972,"surround:\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter8-cprogramminginunix":3412},[4,15,25,35,45,54,64,74,82,91,101,110,120,129,138,147,152,162,172,181,189,194,203,213,223,233,243,253,263,273,283,293,303,313,323,333,339,348,357,366,372,381,391,401,410,420,429,439,448,457,467,476,485,494,504,513,522,531,540,549,559,569,578,587,596,605,610,620,629,638,644,649,658,666,674,679,687,692,700,708,716,724,732,740,749,758,766,774,779,787,796,805,814,823,831,836,845,850,855,863,871,879,887,895,900,905,914,923,931,939,947,955,963],{"stem":5,"path":6,"title":7,"date":8,"collapsed":9,"readingTime":10},"posts\u002F2024\u002FXZZD-Aquire-Score","\u002F2024\u002F10\u002F23\u002FXZZD-Aquire-Score","XZZD_Aquire_Score","2024-10-23 15:08:30",false,{"text":11,"minutes":12,"time":13,"words":14},"3 min read",2.955,177300,591,{"stem":16,"path":17,"title":18,"date":19,"collapsed":9,"readingTime":20},"posts\u002F2024\u002Felec-design-contest-2024","\u002F2024\u002F07\u002F07\u002Felec-design-contest-2024","东四——隐秘的角落","2024-07-07 11:44:32",{"text":21,"minutes":22,"time":23,"words":24},"2 min read",1.74,104400,348,{"stem":26,"path":27,"title":28,"date":29,"collapsed":9,"readingTime":30},"posts\u002F2024\u002Fmechanics","\u002F2024\u002F07\u002F08\u002Fmechanics","about力学","2024-07-08 14:14:07",{"text":31,"minutes":32,"time":33,"words":34},"9 min read",8.54,512400,1708,{"stem":36,"path":37,"title":38,"date":39,"collapsed":9,"readingTime":40},"posts\u002F2025\u002F25GElecDesignContest","\u002F2025\u002F08\u002F26\u002F25GElecDesignContest","纪念最好的大二五组 - Soleil 的 电赛回忆录","2025-08-26 11:06:33",{"text":41,"minutes":42,"time":43,"words":44},"30 min read",29.99,1799400,5998,{"stem":46,"path":47,"title":48,"date":49,"collapsed":9,"readingTime":50},"posts\u002F2025\u002FEngineering-Innovation","\u002F2025\u002F01\u002F20\u002FEngineering-Innovation","工程实践与创新能力大赛","2025-01-20 22:20:59",{"text":21,"minutes":51,"time":52,"words":53},1.365,81900,273,{"stem":55,"path":56,"title":57,"date":58,"collapsed":9,"readingTime":59},"posts\u002F2025\u002FTOP","\u002F2025\u002F01\u002F20\u002FTOP","置顶","3025-01-20 21:53:36",{"text":60,"minutes":61,"time":62,"words":63},"1 min read",0.285,17100,57,{"stem":65,"path":66,"title":67,"date":68,"collapsed":9,"readingTime":69},"posts\u002FUGCourses\u002F1.freshman-spring\u002Fengineering-drawing-notes","\u002F2024\u002F06\u002F30\u002Fengineering-drawing-notes","工程图学期末复习","2024-06-30 21:02:09",{"text":70,"minutes":71,"time":72,"words":73},"15 min read",14.78,886800,2956,{"stem":75,"path":76,"title":77,"date":78,"collapsed":9,"readingTime":79},"posts\u002FUGCourses\u002F1.freshman-spring\u002Findex","\u002Fugcourses\u002Ffreshman-spring","大一春夏","2024-06-30 19:15:28",{"text":80,"minutes":81,"time":81,"words":81},"0 min read",0,{"stem":83,"path":84,"title":85,"date":86,"collapsed":9,"readingTime":87},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002FComplex-Analysis","\u002F2025\u002F01\u002F21\u002FComplex-Analysis","复变函数与积分变换","2025-01-21 13:23:59",{"text":11,"minutes":88,"time":89,"words":90},2.855,171300,571,{"stem":92,"path":93,"title":94,"date":95,"collapsed":9,"readingTime":96},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002FFundamentalsMarxism","\u002F2025\u002F06\u002F06\u002FFundamentalsMarxism","马克思主义基本原理","2025-06-06 00:22:45",{"text":97,"minutes":98,"time":99,"words":100},"6 min read",5.54,332400,1108,{"stem":102,"path":103,"title":104,"date":105,"collapsed":9,"readingTime":106},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002FMathematical-Modeling","\u002F2024\u002F09\u002F22\u002FMathematical-Modeling","数学建模（课程）","2024-09-22 19:07:42",{"text":11,"minutes":107,"time":108,"words":109},2.475,148500,495,{"stem":111,"path":112,"title":113,"date":114,"collapsed":9,"readingTime":115},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002FMicroelectronic-Circuits","\u002F2025\u002F01\u002F20\u002FMicroelectronic-Circuits","电基小子","2025-01-20 23:02:49",{"text":116,"minutes":117,"time":118,"words":119},"5 min read",4.225,253500,845,{"stem":121,"path":122,"title":123,"date":124,"collapsed":9,"readingTime":125},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002FMumerical-Analysis","\u002F2024\u002F09\u002F19\u002FMumerical-Analysis","数值分析方法","2024-09-19 17:12:56",{"text":11,"minutes":126,"time":127,"words":128},2.1,126000,420,{"stem":130,"path":131,"title":132,"date":133,"collapsed":9,"readingTime":134},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002FProbability-Theory","\u002F2025\u002F01\u002F21\u002FProbability-Theory","概率论与数理统计","2025-01-21 12:52:11",{"text":11,"minutes":135,"time":136,"words":137},2.205,132300,441,{"stem":139,"path":140,"title":141,"date":142,"collapsed":9,"readingTime":143},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002Fengineering-training","\u002F2024\u002F09\u002F17\u002Fengineering-training","工程训练","2024-09-17 21:40:26",{"text":11,"minutes":144,"time":145,"words":146},2.385,143100,477,{"stem":148,"path":149,"title":150,"date":78,"collapsed":9,"readingTime":151},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002Findex","\u002Fugcourses\u002Fsophomore-autumn","大二秋冬",{"text":80,"minutes":81,"time":81,"words":81},{"stem":153,"path":154,"title":155,"date":156,"collapsed":9,"readingTime":157},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002Fsolid-state-physics","\u002F2024\u002F09\u002F11\u002Fsolid-state-physics","固体物理基础","2024-09-11 19:15:26",{"text":158,"minutes":159,"time":160,"words":161},"4 min read",3.21,192600,642,{"stem":163,"path":164,"title":165,"date":166,"collapsed":9,"readingTime":167},"posts\u002FUGCourses\u002F3.sophomore-spring\u002FAIFrontier","\u002Fugcourses\u002Fsophomore-spring\u002Faifrontier","人工智能前沿","2025-06-12 14:58:16",{"text":168,"minutes":169,"time":170,"words":171},"25 min read",24.02,1441200,4804,{"stem":173,"path":174,"title":175,"date":166,"collapsed":9,"readingTime":176},"posts\u002FUGCourses\u002F3.sophomore-spring\u002FDigitalSys","\u002Fugcourses\u002Fsophomore-spring\u002Fdigitalsys","数字系统设计",{"text":177,"minutes":178,"time":179,"words":180},"45 min read",44.87,2692200,8974,{"stem":182,"path":183,"title":184,"date":166,"collapsed":9,"readingTime":185},"posts\u002FUGCourses\u002F3.sophomore-spring\u002FMaoTheory","\u002F2025\u002F06\u002F12\u002FMaoTheory","毛概",{"text":70,"minutes":186,"time":187,"words":188},14.63,877800,2926,{"stem":190,"path":191,"title":192,"date":78,"collapsed":9,"readingTime":193},"posts\u002FUGCourses\u002F3.sophomore-spring\u002Findex","\u002Fugcourses\u002Fsophomore-spring","大二春夏",{"text":80,"minutes":81,"time":81,"words":81},{"stem":195,"path":196,"title":197,"date":198,"collapsed":9,"readingTime":199},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture1","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture1","Lecture 1：摩尔定律与 CMOS","2026-09-09 19:39:00",{"text":60,"minutes":200,"time":201,"words":202},0.535,32100,107,{"stem":204,"path":205,"title":206,"date":207,"collapsed":9,"readingTime":208},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture10","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture10","Lecture 10：从 MOS 电容到 MOSFET","2026-09-10 00:10:00",{"text":209,"minutes":210,"time":211,"words":212},"18 min read",17.615,1056900,3523,{"stem":214,"path":215,"title":216,"date":217,"collapsed":9,"readingTime":218},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture11","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture11","Lecture 11：亚阈值效应与 MOSFET 尺寸缩放","2026-09-10 00:20:00",{"text":219,"minutes":220,"time":221,"words":222},"23 min read",22.35,1341000,4470,{"stem":224,"path":225,"title":226,"date":227,"collapsed":9,"readingTime":228},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture12","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture12","Lecture 12：MOSFET 尺寸缩微","2026-09-10 00:30:00",{"text":229,"minutes":230,"time":231,"words":232},"35 min read",34.225,2053500,6845,{"stem":234,"path":235,"title":236,"date":237,"collapsed":9,"readingTime":238},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture13","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture13","Lecture 13：MOS 新范式","2026-09-10 00:40:00",{"text":239,"minutes":240,"time":241,"words":242},"24 min read",23.25,1395000,4650,{"stem":244,"path":245,"title":246,"date":247,"collapsed":9,"readingTime":248},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture2","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture2","Lecture 2：半导体基础","2026-09-09 19:39:31",{"text":249,"minutes":250,"time":251,"words":252},"7 min read",6.02,361200,1204,{"stem":254,"path":255,"title":256,"date":257,"collapsed":9,"readingTime":258},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture3","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture3","Lecture 3：费米能级、载流子散射与迁移率","2026-09-09 21:00:00",{"text":259,"minutes":260,"time":261,"words":262},"13 min read",12.565,753900,2513,{"stem":264,"path":265,"title":266,"date":267,"collapsed":9,"readingTime":268},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture4","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture4","Lecture 4：漂移电流、扩散电流与产生复合","2026-09-09 23:00:00",{"text":269,"minutes":270,"time":271,"words":272},"10 min read",9.22,553200,1844,{"stem":274,"path":275,"title":276,"date":277,"collapsed":9,"readingTime":278},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture5","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture5","Lecture 5：PN 结与耗尽区","2026-09-09 23:10:00",{"text":279,"minutes":280,"time":281,"words":282},"14 min read",13.515,810900,2703,{"stem":284,"path":285,"title":286,"date":287,"collapsed":9,"readingTime":288},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture6","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture6","Lecture 6：正向偏置 PN 结与理想二极管方程","2026-09-09 23:20:00",{"text":289,"minutes":290,"time":291,"words":292},"20 min read",19.095,1145700,3819,{"stem":294,"path":295,"title":296,"date":297,"collapsed":9,"readingTime":298},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture7","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture7","Lecture 7：金半接触","2026-09-09 23:40:00",{"text":299,"minutes":300,"time":301,"words":302},"16 min read",15.195,911700,3039,{"stem":304,"path":305,"title":306,"date":307,"collapsed":9,"readingTime":308},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture8","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture8","Lecture 8：PN 结在光电领域的应用","2026-09-09 23:50:00",{"text":309,"minutes":310,"time":311,"words":312},"54 min read",53.955,3237300,10791,{"stem":314,"path":315,"title":316,"date":317,"collapsed":9,"readingTime":318},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture9","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture9","Lecture 9：MOS 电容","2026-09-10 00:00:00",{"text":319,"minutes":320,"time":321,"words":322},"21 min read",20.355,1221300,4071,{"stem":324,"path":325,"title":326,"date":327,"collapsed":9,"readingTime":328},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FMidtermExam","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Fmidtermexam","期中复习题","2026-09-09 23:30:00",{"text":329,"minutes":330,"time":331,"words":332},"8 min read",7.595,455700,1519,{"stem":334,"path":335,"title":336,"date":337,"collapsed":9,"readingTime":338},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FMockExam","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Fmockexam","押题密卷","2026-09-10 00:50:00",{"text":21,"minutes":51,"time":52,"words":53},{"stem":340,"path":341,"title":342,"date":198,"collapsed":343,"readingTime":344},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002Findex","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices","微电子器件",true,{"text":158,"minutes":345,"time":346,"words":347},3.055,183300,611,{"stem":349,"path":350,"title":351,"date":352,"collapsed":9,"readingTime":353},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F1.HistoryMetaCharacters","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fhistorymetacharacters","History & Meta Characters","2026-09-10 20:25:44",{"text":269,"minutes":354,"time":355,"words":356},9.36,561600,1872,{"stem":358,"path":359,"title":360,"date":361,"collapsed":9,"readingTime":362},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F10.PastExams\u002F1.ExamAutumn2223","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fpastexams\u002Fexamautumn2223","22-23 秋冬历年卷","2026-09-10 20:26:49",{"text":319,"minutes":363,"time":364,"words":365},20.295,1217700,4059,{"stem":367,"path":368,"title":369,"date":370,"collapsed":9,"readingTime":371},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F10.PastExams\u002F2.Exam2021","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fpastexams\u002Fexam2021","20-21 历年卷","2026-09-10 20:26:50",{"text":289,"minutes":290,"time":291,"words":292},{"stem":373,"path":374,"title":375,"date":376,"collapsed":9,"readingTime":377},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F10.PastExams\u002F3.ExamRecall1","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fpastexams\u002Fexamrecall1","不知名回忆卷 1","2026-09-10 20:26:51",{"text":116,"minutes":378,"time":379,"words":380},4.215,252900,843,{"stem":382,"path":383,"title":384,"date":385,"collapsed":9,"readingTime":386},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F10.PastExams\u002F4.ExamRecall23","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fpastexams\u002Fexamrecall23","不知名回忆卷 2\u002F3","2026-09-10 20:26:52",{"text":387,"minutes":388,"time":389,"words":390},"12 min read",11.235,674100,2247,{"stem":392,"path":393,"title":394,"date":395,"collapsed":9,"readingTime":396},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F1.Chapter1-Introduction","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter1-introduction","Chapter 1：Introduction","2026-09-10 20:27:26",{"text":397,"minutes":398,"time":399,"words":400},"19 min read",18.435,1106100,3687,{"stem":402,"path":403,"title":404,"date":405,"collapsed":9,"readingTime":406},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F2.Chapter2-IntroductionToUnix","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter2-introductiontounix","Chapter 2：Introduction to Unix","2026-09-10 20:27:40",{"text":168,"minutes":407,"time":408,"words":409},24.895,1493700,4979,{"stem":411,"path":412,"title":413,"date":414,"collapsed":9,"readingTime":415},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F3.Chapter3-ViAndShell","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter3-viandshell","Chapter 3：Vi and Shell","2026-09-10 20:27:41",{"text":416,"minutes":417,"time":418,"words":419},"32 min read",31.035,1862100,6207,{"stem":421,"path":422,"title":423,"date":424,"collapsed":9,"readingTime":425},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F4.Chapter4-Network","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter4-network","Chapter 4：Network","2026-09-10 20:27:49",{"text":239,"minutes":426,"time":427,"words":428},23.975,1438500,4795,{"stem":430,"path":431,"title":432,"date":433,"collapsed":9,"readingTime":434},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F5.Chapter5-Administration","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter5-administration","Chapter 5：Administration","2026-09-10 20:27:51",{"text":435,"minutes":436,"time":437,"words":438},"36 min read",35.41,2124600,7082,{"stem":440,"path":441,"title":442,"date":443,"collapsed":9,"readingTime":444},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F6.Chapter6-Xwindow","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter6-xwindow","Chapter 6：Xwindow","2026-09-10 20:27:53",{"text":319,"minutes":445,"time":446,"words":447},20.235,1214100,4047,{"stem":449,"path":450,"title":451,"date":452,"collapsed":9,"readingTime":453},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F7.Chapter7-SoftwareDevelopmentTools","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter7-softwaredevelopmenttools","Chapter 7：Software Development Tools","2026-09-10 20:27:54",{"text":209,"minutes":454,"time":455,"words":456},17.85,1071000,3570,{"stem":458,"path":459,"title":460,"date":461,"collapsed":9,"readingTime":462},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F8.Chapter8-CProgrammingInUnix","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter8-cprogramminginunix","Chapter 8：C Programming in Unix","2026-09-10 20:27:57",{"text":463,"minutes":464,"time":465,"words":466},"17 min read",16.855,1011300,3371,{"stem":468,"path":469,"title":470,"date":471,"collapsed":9,"readingTime":472},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F2.LinuxUnix","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Flinuxunix","Linux & Unix","2026-09-10 20:25:46",{"text":41,"minutes":473,"time":474,"words":475},29.33,1759800,5866,{"stem":477,"path":478,"title":479,"date":480,"collapsed":9,"readingTime":481},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F3.Vi","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fvi","Vi","2026-09-10 20:25:47",{"text":329,"minutes":482,"time":483,"words":484},7.95,477000,1590,{"stem":486,"path":487,"title":488,"date":489,"collapsed":9,"readingTime":490},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F4.ViCopy","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fvicopy","Vi（详细版）","2026-09-10 20:25:49",{"text":279,"minutes":491,"time":492,"words":493},13.785,827100,2757,{"stem":495,"path":496,"title":497,"date":498,"collapsed":9,"readingTime":499},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F5.Shells","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fshells","Shells","2026-09-10 20:25:51",{"text":500,"minutes":501,"time":502,"words":503},"22 min read",21.21,1272600,4242,{"stem":505,"path":506,"title":507,"date":508,"collapsed":9,"readingTime":509},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F6.Network","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fnetwork","Network","2026-09-10 20:25:54",{"text":319,"minutes":510,"time":511,"words":512},20.595,1235700,4119,{"stem":514,"path":515,"title":516,"date":517,"collapsed":9,"readingTime":518},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F7.SystemAdministration","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fsystemadministration","System Administration","2026-09-10 20:26:44",{"text":329,"minutes":519,"time":520,"words":521},7.12,427200,1424,{"stem":523,"path":524,"title":525,"date":526,"collapsed":9,"readingTime":527},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F8.XWindow","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fxwindow","XWindow","2026-09-10 20:26:45",{"text":97,"minutes":528,"time":529,"words":530},5.105,306300,1021,{"stem":532,"path":533,"title":534,"date":535,"collapsed":9,"readingTime":536},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F9.SystemDevelopmentTools","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fsystemdevelopmenttools","System Development Tools","2026-09-10 20:26:47",{"text":387,"minutes":537,"time":538,"words":539},11.35,681000,2270,{"stem":541,"path":542,"title":543,"date":544,"collapsed":343,"readingTime":545},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002Findex","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad","面向 ICCAD 的软件基础技术","2026-09-10 12:37:00",{"text":60,"minutes":546,"time":547,"words":548},0.185,11100,37,{"stem":550,"path":551,"title":552,"date":553,"collapsed":9,"readingTime":554},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002FFeiQilai1","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl\u002Ffeiqilai1","飞起来1.0","2026-09-10 12:51:49",{"text":555,"minutes":556,"time":557,"words":558},"105 min read",104.655,6279300,20931,{"stem":560,"path":561,"title":562,"date":563,"collapsed":9,"readingTime":564},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002FFeiQilai2","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl\u002Ffeiqilai2","飞起来2.0","2026-09-10 12:52:06",{"text":565,"minutes":566,"time":567,"words":568},"29 min read",28.755,1725300,5751,{"stem":570,"path":571,"title":572,"date":573,"collapsed":9,"readingTime":574},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002FFeiQilai3","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl\u002Ffeiqilai3","飞起来3.0","2026-09-10 12:52:12",{"text":116,"minutes":575,"time":576,"words":577},4.49,269400,898,{"stem":579,"path":580,"title":581,"date":582,"collapsed":9,"readingTime":583},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002FLecture13","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl\u002Flecture13","Lecture 13：浮点数标准","2026-09-10 12:51:27",{"text":11,"minutes":584,"time":585,"words":586},2.575,154500,515,{"stem":588,"path":589,"title":590,"date":591,"collapsed":9,"readingTime":592},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002FLecture6","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl\u002Flecture6","Lecture 6：Behavioral Modeling，非阻塞赋值","2026-09-10 12:51:12",{"text":97,"minutes":593,"time":594,"words":595},5.34,320400,1068,{"stem":597,"path":598,"title":599,"date":600,"collapsed":9,"readingTime":601},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002FPPTCorrespondence","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl\u002Fpptcorrespondence","与PPT的对应","2026-09-10 12:52:18",{"text":269,"minutes":602,"time":603,"words":604},9.275,556500,1855,{"stem":606,"path":607,"title":608,"date":544,"collapsed":343,"readingTime":609},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002Findex","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl","硬件描述语言原理与应用",{"text":60,"minutes":61,"time":62,"words":63},{"stem":611,"path":612,"title":613,"date":614,"collapsed":9,"readingTime":615},"posts\u002FUGCourses\u002F4.junior-autumn\u002F4.analogICDesign\u002F1.BeforeMidterm","\u002Fugcourses\u002Fjunior-autumn\u002Fanalogicdesign\u002Fbeforemidterm","期中前","2026-09-10 20:28:52",{"text":616,"minutes":617,"time":618,"words":619},"11 min read",10.835,650100,2167,{"stem":621,"path":622,"title":623,"date":624,"collapsed":9,"readingTime":625},"posts\u002FUGCourses\u002F4.junior-autumn\u002F4.analogICDesign\u002F2.MidtermExam2425","\u002Fugcourses\u002Fjunior-autumn\u002Fanalogicdesign\u002Fmidtermexam2425","24-25 期中","2026-09-10 20:29:00",{"text":21,"minutes":626,"time":627,"words":628},1.22,73200,244,{"stem":630,"path":631,"title":632,"date":633,"collapsed":9,"readingTime":634},"posts\u002FUGCourses\u002F4.junior-autumn\u002F4.analogICDesign\u002F3.FinalExamReview","\u002Fugcourses\u002Fjunior-autumn\u002Fanalogicdesign\u002Ffinalexamreview","期末考试整理","2026-09-10 20:29:09",{"text":387,"minutes":635,"time":636,"words":637},11.36,681600,2272,{"stem":639,"path":640,"title":641,"date":642,"collapsed":343,"readingTime":643},"posts\u002FUGCourses\u002F4.junior-autumn\u002F4.analogICDesign\u002Findex","\u002Fugcourses\u002Fjunior-autumn\u002Fanalogicdesign","模拟集成电路设计","2026-09-10 20:00:00",{"text":80,"minutes":81,"time":81,"words":81},{"stem":645,"path":646,"title":647,"date":78,"collapsed":9,"readingTime":648},"posts\u002FUGCourses\u002F4.junior-autumn\u002Findex","\u002Fugcourses\u002Fjunior-autumn","大三秋冬",{"text":80,"minutes":81,"time":81,"words":81},{"stem":650,"path":651,"title":652,"date":653,"collapsed":9,"readingTime":654},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F1.Chapter3-Device","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter3-device","Chapter 3：器件 Device","2026-09-10 21:14:41",{"text":249,"minutes":655,"time":656,"words":657},6.055,363300,1211,{"stem":659,"path":660,"title":661,"date":653,"collapsed":9,"readingTime":662},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F10.Chapter12-Arithmetic","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter12-arithmetic","Chapter 12：算术运算电路 Arithmetic",{"text":168,"minutes":663,"time":664,"words":665},24.245,1454700,4849,{"stem":667,"path":668,"title":669,"date":653,"collapsed":9,"readingTime":670},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F11.Chapter13-Memory","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter13-memory","Chapter 13：存储器 Memory",{"text":229,"minutes":671,"time":672,"words":673},34.235,2054100,6847,{"stem":675,"path":676,"title":677,"date":653,"collapsed":9,"readingTime":678},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F12.Chapter14","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter14","Chapter 14",{"text":80,"minutes":81,"time":81,"words":81},{"stem":680,"path":681,"title":682,"date":653,"collapsed":9,"readingTime":683},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F13.PastExams\u002F1.Midterm2022","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fpastexams\u002Fmidterm2022","2022 期中试题",{"text":60,"minutes":684,"time":685,"words":686},0.075,4500,15,{"stem":688,"path":689,"title":690,"date":653,"collapsed":9,"readingTime":691},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F13.PastExams\u002F2.Midterm2023","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fpastexams\u002Fmidterm2023","2023 期中试题",{"text":80,"minutes":81,"time":81,"words":81},{"stem":693,"path":694,"title":695,"date":653,"collapsed":9,"readingTime":696},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F13.PastExams\u002F3.FinalPolished","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fpastexams\u002Ffinalpolished","期末历年卷（AI 润色版）",{"text":21,"minutes":697,"time":698,"words":699},1.575,94500,315,{"stem":701,"path":702,"title":703,"date":653,"collapsed":9,"readingTime":704},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F14.ExamRecall2026","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fexamrecall2026","数字集成电路回忆 2026",{"text":60,"minutes":705,"time":706,"words":707},0.49,29400,98,{"stem":709,"path":710,"title":711,"date":653,"collapsed":9,"readingTime":712},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F2.Chapter4-Wire","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter4-wire","Chapter 4：导线 Wire",{"text":397,"minutes":713,"time":714,"words":715},18.65,1119000,3730,{"stem":717,"path":718,"title":719,"date":653,"collapsed":9,"readingTime":720},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F3.Chapter5-Inverter","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter5-inverter","Chapter 5：CMOS 反相器 Inverter",{"text":269,"minutes":721,"time":722,"words":723},9.385,563100,1877,{"stem":725,"path":726,"title":727,"date":653,"collapsed":9,"readingTime":728},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F4.Chapter6-LogicGate","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter6-logicgate","Chapter 6：逻辑门 Logic Gate",{"text":31,"minutes":729,"time":730,"words":731},8.635,518100,1727,{"stem":733,"path":734,"title":735,"date":653,"collapsed":9,"readingTime":736},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F5.Chapter7-SequentialLogic","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter7-sequentiallogic","Chapter 7：时序逻辑 Sequential Logic",{"text":463,"minutes":737,"time":738,"words":739},16.645,998700,3329,{"stem":741,"path":742,"title":743,"date":653,"collapsed":9,"readingTime":744},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F6.Chapter8-Speed","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter8-speed","Chapter 8：延迟与速度 Speed",{"text":745,"minutes":746,"time":747,"words":748},"33 min read",32.885,1973100,6577,{"stem":750,"path":751,"title":752,"date":653,"collapsed":9,"readingTime":753},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F7.Chapter9-Power","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter9-power","Chapter 9：功耗 Power",{"text":754,"minutes":755,"time":756,"words":757},"31 min read",31.005,1860300,6201,{"stem":759,"path":760,"title":761,"date":653,"collapsed":9,"readingTime":762},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F8.Chapter10-Interconnect","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter10-interconnect","Chapter 10：互连 Interconnect",{"text":463,"minutes":763,"time":764,"words":765},16.32,979200,3264,{"stem":767,"path":768,"title":769,"date":653,"collapsed":9,"readingTime":770},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F9.Chapter11-Timing","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter11-timing","Chapter 11：时序 Timing",{"text":289,"minutes":771,"time":772,"words":773},19.68,1180800,3936,{"stem":775,"path":776,"title":777,"date":653,"collapsed":343,"readingTime":778},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002Findex","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign","数字集成电路设计",{"text":80,"minutes":81,"time":81,"words":81},{"stem":780,"path":781,"title":782,"date":653,"collapsed":9,"readingTime":783},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F1.L1-Intro","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl1-intro","L1：计算机发展史与体系结构导论",{"text":397,"minutes":784,"time":785,"words":786},18.695,1121700,3739,{"stem":788,"path":789,"title":790,"date":653,"collapsed":9,"readingTime":791},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F10.L8-9-Memory","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl8-9-memory","L8-9：存储器层次结构",{"text":792,"minutes":793,"time":794,"words":795},"128 min read",127.1,7626000,25420,{"stem":797,"path":798,"title":799,"date":653,"collapsed":9,"readingTime":800},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F11.L10-11-Parallelism","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl10-11-parallelism","L10-11：并行性",{"text":801,"minutes":802,"time":803,"words":804},"159 min read",158.86,9531600,31772,{"stem":806,"path":807,"title":808,"date":653,"collapsed":9,"readingTime":809},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F12.L12-CacheCoherence","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl12-cachecoherence","L12：缓存一致性 Cache Coherence",{"text":810,"minutes":811,"time":812,"words":813},"76 min read",75.395,4523700,15079,{"stem":815,"path":816,"title":817,"date":653,"collapsed":9,"readingTime":818},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F13.L13-14-ComplexPipeline","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl13-14-complexpipeline","L13-14：复杂流水线（衔接 L7）",{"text":819,"minutes":820,"time":821,"words":822},"44 min read",43.985,2639100,8797,{"stem":824,"path":825,"title":826,"date":653,"collapsed":9,"readingTime":827},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F14.L15","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl15","L15：期末复习问答",{"text":269,"minutes":828,"time":829,"words":830},9.105,546300,1821,{"stem":832,"path":833,"title":834,"date":653,"collapsed":9,"readingTime":835},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F2.L2-Binary","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl2-binary","L2：二进制数制",{"text":80,"minutes":81,"time":81,"words":81},{"stem":837,"path":838,"title":839,"date":653,"collapsed":9,"readingTime":840},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F3.L3-CMemory","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl3-cmemory","L3：C 语言与内存模型",{"text":841,"minutes":842,"time":843,"words":844},"98 min read",97.32,5839200,19464,{"stem":846,"path":847,"title":848,"date":653,"collapsed":9,"readingTime":849},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F4.L4a-wbx","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl4a-wbx","L4a：wbx",{"text":80,"minutes":81,"time":81,"words":81},{"stem":851,"path":852,"title":853,"date":653,"collapsed":9,"readingTime":854},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F5.L4b-MachineCode","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl4b-machinecode","L4b：机器码 Machine Code",{"text":80,"minutes":81,"time":81,"words":81},{"stem":856,"path":857,"title":858,"date":653,"collapsed":9,"readingTime":859},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F6.L5-DSD","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl5-dsd","L5：数字系统设计 Digital System Design",{"text":269,"minutes":860,"time":861,"words":862},9.955,597300,1991,{"stem":864,"path":865,"title":866,"date":653,"collapsed":9,"readingTime":867},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F7.L6a-SingleCycle","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl6a-singlecycle","L6a：单周期处理器设计",{"text":219,"minutes":868,"time":869,"words":870},22.125,1327500,4425,{"stem":872,"path":873,"title":874,"date":653,"collapsed":9,"readingTime":875},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F8.L6b-Microcode","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl6b-microcode","L6b：微码处理器架构",{"text":387,"minutes":876,"time":877,"words":878},11.86,711600,2372,{"stem":880,"path":881,"title":882,"date":653,"collapsed":9,"readingTime":883},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F9.L7-Pipeline","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl7-pipeline","L7：流水线处理器",{"text":177,"minutes":884,"time":885,"words":886},44.505,2670300,8901,{"stem":888,"path":889,"title":890,"date":653,"collapsed":343,"readingTime":891},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002Findex","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization","计算机组成与系统结构",{"text":60,"minutes":892,"time":893,"words":894},0.12,7200,24,{"stem":896,"path":897,"title":898,"date":78,"collapsed":9,"readingTime":899},"posts\u002FUGCourses\u002F5.junior-spring\u002Findex","\u002Fugcourses\u002Fjunior-spring","大三春夏",{"text":80,"minutes":81,"time":81,"words":81},{"stem":901,"path":902,"title":903,"date":78,"collapsed":9,"readingTime":904},"posts\u002FUGCourses\u002Findex","\u002Fugcourses","本科课程",{"text":80,"minutes":81,"time":81,"words":81},{"stem":906,"path":907,"title":908,"date":909,"collapsed":9,"readingTime":910},"posts\u002Fubuntu\u002F1.config","\u002Fubuntu\u002Fconfig","ubuntu 系统配置","2025-08-26 19:38:06",{"text":158,"minutes":911,"time":912,"words":913},3.815,228900,763,{"stem":915,"path":916,"title":917,"date":918,"collapsed":9,"readingTime":919},"posts\u002Fubuntu\u002F2.cadence\u002F1.mmsim","\u002Fubuntu\u002Fcadence\u002Fmmsim","在 Ubuntu 24.04 上安装 Cadence MMSIM 15.1 的兼容性问题","2026-09-09 14:06:40",{"text":158,"minutes":920,"time":921,"words":922},3.5,210000,700,{"stem":924,"path":925,"title":926,"date":918,"collapsed":9,"readingTime":927},"posts\u002Fubuntu\u002F2.cadence\u002F2.innovus","\u002Fubuntu\u002Fcadence\u002Finnovus","Innovus安装",{"text":11,"minutes":928,"time":929,"words":930},2.08,124800,416,{"stem":932,"path":933,"title":934,"date":918,"collapsed":9,"readingTime":935},"posts\u002Fubuntu\u002F2.cadence\u002Findex","\u002Fubuntu\u002Fcadence","Ubuntu24.04安装Cadence 系列软件",{"text":269,"minutes":936,"time":937,"words":938},9.98,598800,1996,{"stem":940,"path":941,"title":942,"date":918,"collapsed":9,"readingTime":943},"posts\u002Fubuntu\u002F3.synopsys","\u002Fubuntu\u002Fsynopsys","Ubuntu 24.04 安装 Synopsys",{"text":269,"minutes":944,"time":945,"words":946},9.555,573300,1911,{"stem":948,"path":949,"title":950,"date":918,"collapsed":9,"readingTime":951},"posts\u002Fubuntu\u002F4.vivado","\u002Fubuntu\u002Fvivado","Ubuntu 24.04 安装 Vivado 2020.1",{"text":60,"minutes":952,"time":953,"words":954},0.62,37200,124,{"stem":956,"path":957,"title":958,"date":918,"collapsed":9,"readingTime":959},"posts\u002Fubuntu\u002F5.migrate","\u002Fubuntu\u002Fmigrate","硬盘迁移系统",{"text":60,"minutes":960,"time":961,"words":962},0.64,38400,128,{"stem":964,"path":965,"title":966,"date":967,"collapsed":9,"readingTime":968},"posts\u002Fubuntu\u002Findex","\u002Fubuntu","Ubuntu装进移动硬盘","2025-08-25 19:38:06",{"text":269,"minutes":969,"time":970,"words":971},9.26,555600,1852,{"id":973,"title":460,"body":974,"categories":3394,"collapsed":9,"date":461,"description":3395,"draft":9,"extension":3396,"hideInArchive":343,"hideInList":343,"image":3397,"meta":3398,"navigation":343,"path":459,"permalink":3397,"published":3397,"readingTime":3400,"recommend":3397,"references":3397,"seo":3401,"sitemap":3402,"stem":458,"tags":3407,"type":3410,"updated":461,"__hash__":3411},"content\u002Fposts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F8.Chapter8-CProgrammingInUnix.md",{"type":975,"value":976,"toc":3369},"minimark",[977,982,1037,1041,1132,1136,1241,1245,1338,1342,1405,1415,1428,1431,1435,1650,1653,1657,1726,1728,1732,1735,1847,1853,1857,2040,2044,2049,2176,2180,2283,2288,2292,2595,2599,2817,2827,2833,2838,2842,3132,3136,3178,3183,3187,3261,3265,3305,3309,3364],[978,979,981],"h4",{"id":980},"review-on-c-basics","Review on C Basics",[983,984,985,1013],"ol",{},[986,987,988,992],"li",{},[989,990,991],"strong",{},"基本编程特性（Basic programming features）",[993,994,995,1001,1007],"ul",{},[986,996,997,1000],{},[989,998,999],{},"变量\u002F运算符\u002F表达式","（variables, operators, expressions）",[986,1002,1003,1006],{},[989,1004,1005],{},"流程控制","（flow control：loop, branch, …）",[986,1008,1009,1012],{},[989,1010,1011],{},"函数","（functions）",[986,1014,1015,1018],{},[989,1016,1017],{},"C 的范围（What C does NOT provide）",[993,1019,1020,1030],{},[986,1021,1022,1023,1026,1027],{},"C ",[989,1024,1025],{},"不直接提供高级特性","（advanced features），例如 ",[989,1028,1029],{},"OS services、I\u002FO",[986,1031,1032,1033,1036],{},"这些能力通常由",[989,1034,1035],{},"库（libraries）","实现",[978,1038,1040],{"id":1039},"learning-more-of-c-programming","Learning More of C Programming",[983,1042,1043,1075,1118],{},[986,1044,1045,1048],{},[989,1046,1047],{},"建议练习（Try do the following）",[993,1049,1050,1061,1068],{},[986,1051,1052,1053,1056,1057,1060],{},"理解 ",[989,1054,1055],{},"编译器","和",[989,1058,1059],{},"链接器","做什么（what compiler and linker do）",[986,1062,1063,1064,1067],{},"调试程序，并查看",[989,1065,1066],{},"汇编代码","（debug + assembly code）",[986,1069,1070,1071,1074],{},"了解一些你的 ",[989,1072,1073],{},"CPU","（know something of your CPU）",[986,1076,1077,1080],{},[989,1078,1079],{},"关键概念（Some key concepts）",[993,1081,1082,1088,1094,1100,1106,1112],{},[986,1083,1084,1087],{},[989,1085,1086],{},"数据表示","（Data representation）",[986,1089,1090,1093],{},[989,1091,1092],{},"变量存储","（Variable storage）",[986,1095,1096,1099],{},[989,1097,1098],{},"字符串处理","（Character string manipulation）",[986,1101,1102,1105],{},[989,1103,1104],{},"指针","（Pointer）",[986,1107,1108,1111],{},[989,1109,1110],{},"内存管理","（Memory management）",[986,1113,1114,1117],{},[989,1115,1116],{},"函数调用过程","（Function calling procedure）",[986,1119,1120,1123],{},[989,1121,1122],{},"学习收益（Why helpful）",[993,1124,1125],{},[986,1126,1127,1128,1131],{},"有助于理解更高级语言（如 ",[989,1129,1130],{},"C++、Python"," 等）的特性设计（feature designs in higher level languages）",[978,1133,1135],{"id":1134},"数据表示-data-representation","数据表示 ｜ Data Representation",[983,1137,1138,1187,1215,1228],{},[986,1139,1140,1143],{},[989,1141,1142],{},"基本类型及大小\u002F范围 ｜ Basic types: size\u002Frange",[993,1144,1145,1151,1157,1163,1169,1175,1181],{},[986,1146,1147,1150],{},[989,1148,1149],{},"void","：0 bytes，无值（0 bytes, no value）",[986,1152,1153,1156],{},[989,1154,1155],{},"char","：1 byte，-128～127（或 0～255）",[986,1158,1159,1162],{},[989,1160,1161],{},"short","：2 bytes，-32767～32767",[986,1164,1165,1168],{},[989,1166,1167],{},"int","：2 \u002F 4 \u002F 8 bytes（对应 16\u002F32\u002F64-bit machines）",[986,1170,1171,1174],{},[989,1172,1173],{},"long","：4 bytes，约 ±2,147,483,648",[986,1176,1177,1180],{},[989,1178,1179],{},"float","：4 bytes，约 ±3.4 × 10^±38",[986,1182,1183,1186],{},[989,1184,1185],{},"double","：8 bytes，约 ±1.79 × 10^±308",[986,1188,1189,1192],{},[989,1190,1191],{},"指针与字符串 ｜ Pointers & strings",[993,1193,1194,1205],{},[986,1195,1196,1199,1200,1204],{},[989,1197,1198],{},"char*","：指向连续的字符字节，以 ",[1201,1202,1203],"code",{"code":1203},"\\0"," 结尾（C 字符串）",[986,1206,1207,1210,1211,1214],{},[989,1208,1209],{},"void*"," \u002F ",[989,1212,1213],{},"int*"," \u002F …：指针长度取决于机器硬件（pointer length depends on machine hardware）",[986,1216,1217,1220],{},[989,1218,1219],{},"复合类型 ｜ Composite types",[993,1221,1222],{},[986,1223,1224,1227],{},[989,1225,1226],{},"structure \u002F union \u002F class","：包含数据成员的内存块（memory block containing data members）",[986,1229,1230,1233],{},[989,1231,1232],{},"查看大小 ｜ Size query",[993,1234,1235],{},[986,1236,1237,1240],{},[989,1238,1239],{},"sizeof()","：获取类型\u002F对象所占字节数（find the size）",[978,1242,1244],{"id":1243},"c-变量类型-c-variable-types","C 变量类型 ｜ C Variable Types",[983,1246,1247,1263,1279,1298],{},[986,1248,1249,1252],{},[989,1250,1251],{},"局部变量 ｜ Local variables",[993,1253,1254,1257],{},[986,1255,1256],{},"在函数体内部声明（declared within the body of a function）",[986,1258,1259,1262],{},[989,1260,1261],{},"只能在该函数内使用","（only be used within that function）",[986,1264,1265,1268],{},[989,1266,1267],{},"全局变量 ｜ Global variables",[993,1269,1270,1273],{},[986,1271,1272],{},"在所有函数之外声明（located outside any of the program’s functions）",[986,1274,1275,1278],{},[989,1276,1277],{},"所有函数都可访问","（available to all functions）",[986,1280,1281,1284],{},[989,1282,1283],{},"静态变量 ｜ Static variables",[993,1285,1286,1292],{},[986,1287,1288,1291],{},[989,1289,1290],{},"在函数内声明","：在该函数内使用（declared in a function, used in this function）",[986,1293,1294,1297],{},[989,1295,1296],{},"在函数外声明","：在该文件内使用（declared outside functions, used in this file）",[986,1299,1300,1303],{},[989,1301,1302],{},"存储位置与生命周期 ｜ Storage & lifetime",[993,1304,1305,1322],{},[986,1306,1307,1310,1311,1314],{},[989,1308,1309],{},"局部变量","：存放在 ",[989,1312,1313],{},"栈（stack）",[993,1315,1316,1319],{},[986,1317,1318],{},"临时的（temporal）",[986,1320,1321],{},"初始值可能是随机的（initial values in random）",[986,1323,1324,1310,1327,1330],{},[989,1325,1326],{},"全局\u002F静态变量",[989,1328,1329],{},"数据段（data segment）",[993,1331,1332,1335],{},[986,1333,1334],{},"生命周期与程序一样长（life as long as the program）",[986,1336,1337],{},"初始值通常为 0（initial value usually be 0），但仍需小心（should be careful）",[978,1339,1341],{"id":1340},"字符串操作-character-string-manipulation","字符串操作 ｜ Character String Manipulation",[983,1343,1344,1381],{},[986,1345,1346,1349],{},[989,1347,1348],{},"字符串函数 ｜ String functions",[993,1350,1351,1357,1363,1369,1375],{},[986,1352,1353,1356],{},[989,1354,1355],{},"strcpy \u002F strncpy","：字符串拷贝（copy）",[986,1358,1359,1362],{},[989,1360,1361],{},"strcat \u002F strncat","：字符串拼接（concatenate）",[986,1364,1365,1368],{},[989,1366,1367],{},"strcmp \u002F strncmp \u002F strcasecmp \u002F strncasecmp","：字符串比较（compare，后两者忽略大小写）",[986,1370,1371,1374],{},[989,1372,1373],{},"strtok","：字符串分割\u002F分词（tokenize）",[986,1376,1377,1380],{},[989,1378,1379],{},"strlen","：字符串长度（length）",[986,1382,1383,1386],{},[989,1384,1385],{},"字符串指针 ｜ String pointer",[993,1387,1388],{},[986,1389,1390,1393],{},[1201,1391,1392],{"code":1392},"char *str;",[993,1394,1395],{},[986,1396,1397,1400,1401,1404],{},[989,1398,1399],{},"str 是指针","，指向内存中字符字节块的",[989,1402,1403],{},"起始字节","（pointer to the beginning byte of the character byte block in memory）",[1406,1407,1408,1411,1412,1414],"p",{},[989,1409,1410],{},"没 n","：拷完整字符串（含 ",[1201,1413,1203],{"code":1203},"），但可能越界写",[1406,1416,1417,1420,1421,1424,1425,1427],{},[989,1418,1419],{},"有 n","：限制最多拷 n 字节，但",[989,1422,1423],{},"可能不带"," ",[1201,1426,1203],{"code":1203},"，需要你自己确保终止符",[1406,1429,1430],{},"什么什么ELF格式？",[978,1432,1434],{"id":1433},"字符串内存示意-character-string-manipulation-memory-example","字符串内存示意 ｜ Character String Manipulation (memory example)",[983,1436,1437,1464,1547],{},[986,1438,1439,1424,1442,1444],{},[989,1440,1441],{},"数组字符串与结尾符 ｜ Char array string &",[1201,1443,1203],{"code":1203},[993,1445,1446,1456],{},[986,1447,1448,1451,1452,1455],{},[1201,1449,1450],{"code":1450},"char str[8] = \"HELLO\";","：内存里依次是 ",[1201,1453,1454],{"code":1454},"H E L L O \\0","，后面还有空余字节",[986,1457,1458,1451,1461],{},[1201,1459,1460],{"code":1460},"char str1[8] = \"WORLD!\";",[1201,1462,1463],{"code":1463},"W O R L D ! \\0",[986,1465,1466,1469],{},[989,1467,1468],{},"指针与偏移 ｜ Pointer & offset",[993,1470,1471,1508],{},[986,1472,1473,1476],{},[1201,1474,1475],{"code":1475},"char *str2 = str + 2;",[993,1477,1478,1492],{},[986,1479,1480,1483,1484,1487,1488,1491],{},[1201,1481,1482],{"code":1482},"str"," 指向 ",[1201,1485,1486],{"code":1486},"str[0]","（即 ",[1201,1489,1490],{"code":1490},"'H'"," 的地址）",[986,1493,1494,1483,1497,1487,1500,1503,1504,1507],{},[1201,1495,1496],{"code":1496},"str2",[1201,1498,1499],{"code":1499},"str[2]",[1201,1501,1502],{"code":1502},"\"HELLO\""," 里的第一个 ",[1201,1505,1506],{"code":1506},"'L'","）",[986,1509,1510,1513],{},[1201,1511,1512],{"code":1512},"printf(\"%s, %d, %d\\n\", str2, strlen(str), strlen(str2));",[993,1514,1515,1530,1539],{},[986,1516,1517,1520,1521,1523,1524,1526,1527],{},[1201,1518,1519],{"code":1519},"%s"," 从 ",[1201,1522,1496],{"code":1496}," 开始一直打印到遇到 ",[1201,1525,1203],{"code":1203},"：输出 ",[989,1528,1529],{},"\"LLO\"",[986,1531,1532,1535,1536],{},[1201,1533,1534],{"code":1534},"strlen(str)","：",[989,1537,1538],{},"5",[986,1540,1541,1535,1544],{},[1201,1542,1543],{"code":1543},"strlen(str2)",[989,1545,1546],{},"3",[986,1548,1549,1552],{},[989,1550,1551],{},"几种常见操作可能造成的结果 ｜ Effects of operations",[993,1553,1554,1577,1608],{},[986,1555,1556,1559],{},[1201,1557,1558],{"code":1558},"strcpy(str, str1);",[993,1560,1561],{},[986,1562,1563,1564,1567,1568,1570,1571,1573,1574],{},"把 ",[1201,1565,1566],{"code":1566},"\"WORLD!\"","（含 ",[1201,1569,1203],{"code":1203},"）拷进 ",[1201,1572,1482],{"code":1482},"，会",[989,1575,1576],{},"覆盖原来的 \"HELLO\"",[986,1578,1579,1582],{},[1201,1580,1581],{"code":1581},"strcat(str2, str1);",[993,1583,1584,1594],{},[986,1585,1586,1587,1589,1590,1593],{},"从 ",[1201,1588,1496],{"code":1496}," 指向的位置开始把 ",[1201,1591,1592],{"code":1592},"str1"," 拼接上去",[986,1595,1596,1535,1599,1601,1602,1604,1605],{},[989,1597,1598],{},"风险",[1201,1600,1496],{"code":1496}," 指向的是 ",[1201,1603,1482],{"code":1482}," 的中间位置，剩余空间很小，容易",[989,1606,1607],{},"越界\u002F覆盖后续内存",[986,1609,1610,1613],{},[1201,1611,1612],{"code":1612},"strncpy(str, str1, strlen(str1));",[993,1614,1615,1631],{},[986,1616,1617,1618,1621,1622,1625,1626,1424,1629],{},"这里 ",[1201,1619,1620],{"code":1620},"strlen(str1)=6","，只拷 6 个字节（",[1201,1623,1624],{"code":1624},"WORLD!","），",[989,1627,1628],{},"不会自动补",[1201,1630,1203],{"code":1203},[986,1632,1633,1634,1636,1637,1424,1640,1424,1642,1645,1646,1649],{},"结果：",[1201,1635,1482],{"code":1482}," 可能变成",[989,1638,1639],{},"非",[1201,1641,1203],{"code":1203},[989,1643,1644],{},"结尾","的“字符串”，后续 ",[1201,1647,1648],{"code":1648},"printf(\"%s\")\u002Fstrlen"," 可能越界读",[1651,1652],"hr",{},[978,1654,1656],{"id":1655},"指针与字节序-pointer-endianness","指针与字节序 ｜ Pointer & Endianness",[983,1658,1659,1683],{},[986,1660,1661,1664],{},[989,1662,1663],{},"指针的定义 ｜ What is a pointer",[993,1665,1666,1673],{},[986,1667,1668,1669,1672],{},"指针是一个变量，保存某个",[989,1670,1671],{},"变量\u002F函数的地址","（a variable containing the address of a variable\u002Ffunction）",[986,1674,1675,1676,1679,1680],{},"形式示例（课件给的写法）：",[1201,1677,1678],{"code":1678},"type *ptr","，函数指针 ",[1201,1681,1682],{"code":1682},"type *(ptr)();",[986,1684,1685,1688],{},[989,1686,1687],{},"地址在内存里的表示 ｜ How an address is stored",[993,1689,1690,1700,1713],{},[986,1691,1692,1693,1696,1697,1507],{},"例子地址：",[1201,1694,1695],{"code":1695},"0xa8906654","（按字节可看作：",[1201,1698,1699],{"code":1699},"a8 90 66 54",[986,1701,1702,1705,1706],{},[989,1703,1704],{},"大端（Big Endian \u002F Motorola order）","：高位字节在低地址\n",[993,1707,1708],{},[986,1709,1710,1711],{},"内存顺序：",[1201,1712,1699],{"code":1699},[986,1714,1715,1718,1719],{},[989,1716,1717],{},"小端（Little Endian \u002F Intel order）","：低位字节在低地址\n",[993,1720,1721],{},[986,1722,1710,1723],{},[1201,1724,1725],{"code":1725},"54 66 90 a8",[1651,1727],{},[978,1729,1731],{"id":1730},"典型内存布局-typical-memory-layout","典型内存布局 ｜ Typical Memory Layout",[1406,1733,1734],{},"智云课堂再看一遍？",[983,1736,1737,1830],{},[986,1738,1739,1742],{},[989,1740,1741],{},"从低地址到高地址的大致分区 ｜ Segments (low → high)",[993,1743,1744,1762,1798,1809,1823],{},[986,1745,1746,1749,1750],{},[989,1747,1748],{},"text 段","（code & constants, read only）\n",[993,1751,1752],{},[986,1753,1754,1755,1758,1759,1507],{},"存放：代码、常量（例如字符串常量 ",[1201,1756,1757],{"code":1757},"\"string\"","、函数 ",[1201,1760,1761],{"code":1761},"f",[986,1763,1764,1767,1768],{},[989,1765,1766],{},"data 段","（read\u002Fwrite）\n",[993,1769,1770,1782],{},[986,1771,1772,1775,1776,1778,1779,1507],{},[989,1773,1774],{},"initialized","：已初始化的全局\u002F静态变量（图中例：",[1201,1777,1406],{"code":1406},", ",[1201,1780,1781],{"code":1781},"i",[986,1783,1784,1787,1788,1778,1791,1794,1795],{},[989,1785,1786],{},"uninitialized（BSS）","：未初始化的全局\u002F静态变量（图中例：",[1201,1789,1790],{"code":1790},"a",[1201,1792,1793],{"code":1793},"v","），通常",[989,1796,1797],{},"初始化为 0",[986,1799,1800,1803,1804],{},[989,1801,1802],{},"heap 堆","（dynamic memory allocation）\n",[993,1805,1806],{},[986,1807,1808],{},"动态分配内存区域",[986,1810,1811,1814,1815],{},[989,1812,1813],{},"stack 栈","（caller info, return address, local variables）\n",[993,1816,1817],{},[986,1818,1819,1820,1507],{},"调用信息、返回地址、局部变量（图中例：",[1201,1821,1822],{"code":1822},"x, y, c",[986,1824,1825,1826,1829],{},"顶部还有：",[989,1827,1828],{},"命令行参数、环境变量","（command-line arguments, environment variables）",[986,1831,1832,1835],{},[989,1833,1834],{},"增长方向 ｜ Growth direction",[993,1836,1837,1842],{},[986,1838,1839],{},[989,1840,1841],{},"堆（heap）向高地址增长",[986,1843,1844],{},[989,1845,1846],{},"栈（stack）向低地址增长",[1406,1848,1849],{},[1850,1851],"img",{"alt":1850,"src":1852},"\u002Fimg\u002FICCAD\u002FDetailCh8-01.png",[978,1854,1856],{"id":1855},"动态数组-dynamic-array","动态数组 ｜ Dynamic Array",[983,1858,1859,1906,1938,1985],{},[986,1860,1861,1864],{},[989,1862,1863],{},"一维动态数组（未初始化）｜ One-dimensional dynamic array (un-initialized)",[993,1865,1866,1871,1891],{},[986,1867,1868],{},[1201,1869,1870],{"code":1870},"int *vector;",[986,1872,1873,1876],{},[1201,1874,1875],{"code":1875},"vector = (int*) malloc(sizeof(int) * NUM);",[993,1877,1878,1885],{},[986,1879,1880,1881,1884],{},"分配 ",[989,1882,1883],{},"NUM 个 int"," 的空间",[986,1886,1887,1890],{},[989,1888,1889],{},"内容不初始化","（un-initialized）",[986,1892,1893,1894],{},"失败处理：\n",[993,1895,1896,1901],{},[986,1897,1898],{},[1201,1899,1900],{"code":1900},"fprintf(stderr, \"Not enough memory\\n\");",[986,1902,1903],{},[1201,1904,1905],{"code":1905},"exit(1);",[986,1907,1908,1911],{},[989,1909,1910],{},"一维动态数组（初始化为 0）｜ Array initialized to 0",[993,1912,1913,1917,1935],{},[986,1914,1915],{},[1201,1916,1870],{"code":1870},[986,1918,1919,1922],{},[1201,1920,1921],{"code":1921},"vector = (int*) calloc(num, sizeof(int));",[993,1923,1924,1929],{},[986,1925,1880,1926],{},[989,1927,1928],{},"num 个 int",[986,1930,1931,1934],{},[989,1932,1933],{},"内存初始化为 0","（initialized to 0）",[986,1936,1937],{},"失败处理同上（Not enough memory \u002F exit(1)）",[986,1939,1940,1943],{},[989,1941,1942],{},"二维动态数组（连续内存）｜ Two-Dimensional dynamic array (contiguous block)",[993,1944,1945,1950,1970],{},[986,1946,1947],{},[1201,1948,1949],{"code":1949},"int *matrix;",[986,1951,1952,1955],{},[1201,1953,1954],{"code":1954},"matrix = (int*) calloc(ROWS * COLS, sizeof(int));",[993,1956,1957,1967],{},[986,1958,1959,1960,1963,1964],{},"实际分配的是 ",[989,1961,1962],{},"一整块连续的一维内存","，总元素数 ",[1201,1965,1966],{"code":1966},"ROWS*COLS",[986,1968,1969],{},"初始值为 0（each set to 0）",[986,1971,1972,1973,1976,1977],{},"访问 ",[1201,1974,1975],{"code":1975},"(i, j)"," 元素：\n",[993,1978,1979],{},[986,1980,1981,1984],{},[1201,1982,1983],{"code":1983},"matrix[i * COLS + j] = 24;","（access element (i,j)）",[986,1986,1987,1990],{},[989,1988,1989],{},"二维动态数组（指针数组）｜ Pointer array (slower but convenient)",[993,1991,1992,1998,2003,2013,2030],{},[986,1993,1994,1995],{},"说明：",[989,1996,1997],{},"Pointer array, slower but convenient",[986,1999,2000],{},[1201,2001,2002],{"code":2002},"int **matrix, i;",[986,2004,2005,2006],{},"先分配“行指针数组”：\n",[993,2007,2008],{},[986,2009,2010],{},[1201,2011,2012],{"code":2012},"matrix = (int**) calloc(ROWS, sizeof(int*));",[986,2014,2015,2016],{},"再逐行分配每一行：\n",[993,2017,2018],{},[986,2019,2020,2023],{},[1201,2021,2022],{"code":2022},"for (i = 0; i \u003C ROWS; i++)",[993,2024,2025],{},[986,2026,2027],{},[1201,2028,2029],{"code":2029},"matrix[i] = (int*) calloc(COLS, sizeof(int));",[986,2031,2032,2033],{},"每次分配都要检查 NULL，并在失败时：\n",[993,2034,2035],{},[986,2036,2037],{},[1201,2038,2039],{"code":2039},"fprintf(stderr, \"Not enough memory\\n\"); exit(1);",[978,2041,2043],{"id":2042},"函数参数传递-passing-function-arguments","函数参数传递 ｜ Passing Function Arguments",[1406,2045,2046],{},[1850,2047],{"alt":1850,"src":2048},"\u002Fimg\u002FICCAD\u002FDetailCh8-02.png",[983,2050,2051,2080,2127,2156],{},[986,2052,2053,2056],{},[989,2054,2055],{},"函数调用形式 ｜ Call form",[993,2057,2058,2064,2070],{},[986,2059,2060,2061],{},"函数定义示例：",[1201,2062,2063],{"code":2063},"int func(int arg0, char* arg2, long arg3, float *arg4)",[986,2065,2066,2067],{},"调用示例：",[1201,2068,2069],{"code":2069},"r = func(a, b, c, d, e);",[986,2071,2072,2073,2076,2077],{},"重点：调用时传入的实参 ",[1201,2074,2075],{"code":2075},"a,b,c,d,e"," 会对应到形参 ",[1201,2078,2079],{"code":2079},"arg0,...",[986,2081,2082,2085],{},[989,2083,2084],{},"两种主要传参位置 ｜ Where arguments go",[993,2086,2087,2108],{},[986,2088,2089,2092],{},[989,2090,2091],{},"栈（Stack）传参",[993,2093,2094,2101],{},[986,2095,2096,2097,2100],{},"参数被压入栈中（图左：",[1201,2098,2099],{"code":2099},"a b c d e"," 依次放在栈里）",[986,2102,2103,2104,2107],{},"通过 ",[989,2105,2106],{},"栈指针（stack pointer）"," 定位这些参数",[986,2109,2110,2113],{},[989,2111,2112],{},"寄存器（Registers）传参",[993,2114,2115,2124],{},[986,2116,2117,2118,2120,2121,1507],{},"参数直接放进寄存器（图右：",[1201,2119,2099],{"code":2099}," 放在 ",[1201,2122,2123],{"code":2123},"%o0 ~ %o4",[986,2125,2126],{},"寄存器传参通常更快（少访存）",[986,2128,2129,2132],{},[989,2130,2131],{},"返回值位置 ｜ Return value",[993,2133,2134,2150],{},[986,2135,2136,2137],{},"返回值放在特定寄存器里：\n",[993,2138,2139],{},[986,2140,2141,2142,2145,2146,2149],{},"例：",[1201,2143,2144],{"code":2144},"eAX","（x86）或 ",[1201,2147,2148],{"code":2148},"%o0","（图里写的寄存器）",[986,2151,2152,2153],{},"调用结束后，调用方从该寄存器取回结果赋给 ",[1201,2154,2155],{"code":2155},"r",[986,2157,2158,2161],{},[989,2159,2160],{},"图的核心想表达的点 ｜ Key takeaway",[993,2162,2163,2173],{},[986,2164,2165,2166,2169,2170],{},"同一个函数调用，参数既可能走 ",[989,2167,2168],{},"stack","，也可能走 ",[989,2171,2172],{},"registers",[986,2174,2175],{},"具体用哪种、以及先用多少个寄存器，取决于平台\u002FABI\u002F编译器约定",[978,2177,2179],{"id":2178},"标准与底层-io-standard-and-low-level-io","标准与底层 I\u002FO ｜ Standard and Low-Level I\u002FO",[983,2181,2182,2204,2229,2253],{},[986,2183,2184,2187],{},[989,2185,2186],{},"整体分层 ｜ Overall layers",[993,2188,2189,2194,2199],{},[986,2190,2191],{},[989,2192,2193],{},"应用程序 ｜ Application program",[986,2195,2196],{},[989,2197,2198],{},"标准 I\u002FO 库（高层 I\u002FO，流）｜ Standard I\u002FO library (high level I\u002FO, streams)",[986,2200,2201],{},[989,2202,2203],{},"UNIX 内核 ｜ UNIX kernel",[986,2205,2206,2209],{},[989,2207,2208],{},"高层 I\u002FO（流）｜ High level I\u002FO (streams)",[993,2210,2211,2218],{},[986,2212,2213,2214,2217],{},"应用通过 ",[989,2215,2216],{},"Standard I\u002FO library"," 做 I\u002FO（比如“流”的概念：文本\u002F缓冲\u002F格式化等）",[986,2219,2220,2221,2224,2225,2228],{},"特点：更方便、更抽象，通常带 ",[989,2222,2223],{},"缓冲","、",[989,2226,2227],{},"格式化","（例如 printf 这类）",[986,2230,2231,2234],{},[989,2232,2233],{},"底层 I\u002FO（文件描述符）｜ Low level I\u002FO (file descriptors)",[993,2235,2236,2243,2250],{},[986,2237,2238,2239,2242],{},"标准 I\u002FO 库的底层最终会调用 ",[989,2240,2241],{},"UNIX kernel"," 提供的系统调用接口",[986,2244,2245,2246,2249],{},"使用 ",[989,2247,2248],{},"file descriptors（文件描述符）"," 来标识打开的文件\u002F设备\u002F管道等",[986,2251,2252],{},"特点：更接近 OS，粒度更底层，控制更直接（但用起来更“硬核”）",[986,2254,2255,2258],{},[989,2256,2257],{},"两条路径 ｜ Two paths shown in the figure",[993,2259,2260,2273],{},[986,2261,2262,2265],{},[989,2263,2264],{},"常见路径：应用 → 标准 I\u002FO 库 → 内核",[993,2266,2267,2270],{},[986,2268,2269],{},"图中蓝色箭头：应用与标准库交互（streams）",[986,2271,2272],{},"红色箭头：标准库再向下调用内核（file descriptors）",[986,2274,2275,2278],{},[989,2276,2277],{},"直接路径：应用 → 内核（系统调用）",[993,2279,2280],{},[986,2281,2282],{},"图左侧长红箭头：应用也可以跳过标准库，直接做 low level I\u002FO（file descriptors \u002F syscalls）",[1406,2284,2285],{},[1850,2286],{"alt":1850,"src":2287},"\u002Fimg\u002FICCAD\u002FDetailCh8-03.png",[978,2289,2291],{"id":2290},"流-io-与底层-io-stream-io-vs-low-level-io","流 I\u002FO 与底层 I\u002FO ｜ Stream I\u002FO vs. Low-Level I\u002FO",[983,2293,2294,2365,2467,2525],{},[986,2295,2296,2299],{},[989,2297,2298],{},"整体关系（从应用到内核）｜ Overall relationship",[993,2300,2301,2323,2352],{},[986,2302,2303,2306],{},[989,2304,2305],{},"应用程序（Application program）",[993,2307,2308],{},[986,2309,2310,2311],{},"可以用两条路做 I\u002FO：\n",[993,2312,2313,2318],{},[986,2314,2315],{},[989,2316,2317],{},"高层 I\u002FO：流（streams）",[986,2319,2320],{},[989,2321,2322],{},"底层 I\u002FO：系统调用（syscalls）",[986,2324,2325,1424,2328,2331,2333],{},[989,2326,2327],{},"标准 I\u002FO 库（Standard I\u002FO library,",[1201,2329,2330],{"code":2330},"stdio",[989,2332,1507],{},[993,2334,2335,2346],{},[986,2336,2337,2338,2341,2342,2345],{},"提供 ",[989,2339,2340],{},"Stream I\u002FO（流 I\u002FO）","：带缓冲、带格式化（",[1201,2343,2344],{"code":2344},"printf\u002Fscanf"," 风格）",[986,2347,2348,2349],{},"底层会调用内核的 ",[989,2350,2351],{},"Low-level I\u002FO（open\u002Fread\u002Fwrite 等）",[986,2353,2354,2357],{},[989,2355,2356],{},"UNIX 内核（UNIX kernel）",[993,2358,2359],{},[986,2360,2337,2361,2364],{},[989,2362,2363],{},"Low-level I\u002FO（file descriptors）","：最原始、最贴近 OS 的接口",[986,2366,2367,2370],{},[989,2368,2369],{},"Stream I\u002FO（流 I\u002FO）特点｜ Stream I\u002FO features",[993,2371,2372,2382,2402],{},[986,2373,2374,2375,2378,2379,1507],{},"句柄类型：",[1201,2376,2377],{"code":2377},"FILE *","（比如 ",[1201,2380,2381],{"code":2381},"stdin\u002Fstdout",[986,2383,2384,2385],{},"常见优点：\n",[993,2386,2387,2393],{},[986,2388,2389,2392],{},[989,2390,2391],{},"缓冲（buffering）","：减少系统调用次数",[986,2394,2395,1535,2398,2401],{},[989,2396,2397],{},"格式化 I\u002FO",[1201,2399,2400],{"code":2400},"fprintf\u002Ffscanf"," 更方便",[986,2403,2404,2405],{},"典型函数（slide 上这些）：\n",[993,2406,2407,2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462],{},[986,2408,2409],{},[1201,2410,2411],{"code":2411},"FILE *fopen(char *pathname, char *type)",[986,2413,2414],{},[1201,2415,2416],{"code":2416},"int fflush(FILE *fp)",[986,2418,2419],{},[1201,2420,2421],{"code":2421},"int fprintf(FILE *fp, char *format, ...)",[986,2423,2424],{},[1201,2425,2426],{"code":2426},"int fscanf(FILE *fp, char *format, ...)",[986,2428,2429],{},[1201,2430,2431],{"code":2431},"int fgetc(FILE *fp)",[986,2433,2434],{},[1201,2435,2436],{"code":2436},"int fputc(int c, FILE *fp)",[986,2438,2439],{},[1201,2440,2441],{"code":2441},"int fputs(char *s, FILE *fp)",[986,2443,2444],{},[1201,2445,2446],{"code":2446},"char *fgets(char *s, int n, FILE *fp)",[986,2448,2449],{},[1201,2450,2451],{"code":2451},"size_t fread(void *ptr, size_t size, size_t nobj, FILE *fp)",[986,2453,2454],{},[1201,2455,2456],{"code":2456},"size_t fwrite(void *ptr, size_t size, size_t nobj, FILE *fp)",[986,2458,2459],{},[1201,2460,2461],{"code":2461},"long ftell(FILE *fp)",[986,2463,2464],{},[1201,2465,2466],{"code":2466},"int fseek(FILE *fp, long offset, int placement)",[986,2468,2469,2472],{},[989,2470,2471],{},"Low-Level I\u002FO（底层 I\u002FO）特点｜ Low-level I\u002FO features",[993,2473,2474,2482,2496],{},[986,2475,2374,2476,1424,2479],{},[989,2477,2478],{},"文件描述符",[1201,2480,2481],{"code":2481},"int fd",[986,2483,2384,2484],{},[993,2485,2486,2489],{},[986,2487,2488],{},"更贴近 OS、行为更“直接”",[986,2490,2491,2492,2495],{},"适合做：管道\u002F重定向、非阻塞、",[1201,2493,2494],{"code":2494},"select\u002Fpoll\u002Fepoll","、更细粒度控制等",[986,2497,2404,2498],{},[993,2499,2500,2505,2510,2515,2520],{},[986,2501,2502],{},[1201,2503,2504],{"code":2504},"int open(char *path, int oflag, ...\u002F* mode_t m *\u002F)",[986,2506,2507],{},[1201,2508,2509],{"code":2509},"int close(int fd)",[986,2511,2512],{},[1201,2513,2514],{"code":2514},"off_t lseek(int fd, off_t offset, int placement)",[986,2516,2517],{},[1201,2518,2519],{"code":2519},"ssize_t read(int fd, void *buff, size_t nbytes)",[986,2521,2522],{},[1201,2523,2524],{"code":2524},"ssize_t write(int fd, void *buff, size_t nbytes)",[986,2526,2527,2530],{},[989,2528,2529],{},"图里那张“表”在讲什么｜ What the table diagram means",[993,2531,2532,2542,2564,2577],{},[986,2533,2534,2537,2538,2541],{},[989,2535,2536],{},"process table entry（进程表项）","：每个进程有自己的 fd 表（",[1201,2539,2540],{"code":2540},"fd 0, fd 1, ...","），每个 fd 指向一个内核对象",[986,2543,2544,2547,2548],{},[989,2545,2546],{},"file table（文件表）","：记录\n",[993,2549,2550,2553,2558],{},[986,2551,2552],{},"文件状态标志（file status flags）",[986,2554,2555],{},[989,2556,2557],{},"当前文件偏移（current file offset）",[986,2559,2560,2561],{},"指向 ",[989,2562,2563],{},"v-node",[986,2565,2566,2547,2569],{},[989,2567,2568],{},"v-node table（v-node \u002F inode 信息）",[993,2570,2571,2574],{},[986,2572,2573],{},"v-node \u002F i-node 信息",[986,2575,2576],{},"当前文件大小等",[986,2578,2579,2580],{},"关键含义：\n",[993,2581,2582,2588],{},[986,2583,2584,2587],{},[989,2585,2586],{},"不同进程可以“共享”同一个 file table entry","（因此可能共享同一个 file offset）",[986,2589,2590,2591,2594],{},"这就是为什么 ",[1201,2592,2593],{"code":2593},"fork()"," 后父子进程对同一打开文件的读写，会互相影响偏移量（常见考点）",[978,2596,2598],{"id":2597},"unix-系统调用-unix-system-calls","Unix 系统调用 ｜ Unix System Calls",[983,2600,2601,2621,2718],{},[986,2602,2603,2606],{},[989,2604,2605],{},"显示系统错误（Show system errors）",[993,2607,2608],{},[986,2609,2610,2613],{},[1201,2611,2612],{"code":2612},"perror()",[993,2614,2615],{},[986,2616,2617,2618,1507],{},"用来输出最近一次系统调用失败对应的错误信息（通常基于 ",[1201,2619,2620],{"code":2620},"errno",[986,2622,2623,2626],{},[989,2624,2625],{},"文件系统调用（File system calls）",[993,2627,2628,2652,2679,2700],{},[986,2629,2630,2633],{},[989,2631,2632],{},"基础文件 I\u002FO",[993,2634,2635],{},[986,2636,2637,1778,2640,1778,2643,1778,2646,1778,2649],{},[1201,2638,2639],{"code":2639},"open()",[1201,2641,2642],{"code":2642},"lseek()",[1201,2644,2645],{"code":2645},"read()",[1201,2647,2648],{"code":2648},"write()",[1201,2650,2651],{"code":2651},"close()",[986,2653,2654,2657],{},[989,2655,2656],{},"目录与权限\u002F属性",[993,2658,2659],{},[986,2660,2661,1778,2664,1778,2667,1778,2670,1778,2673,1778,2676],{},[1201,2662,2663],{"code":2663},"chdir()",[1201,2665,2666],{"code":2666},"chroot()",[1201,2668,2669],{"code":2669},"chown()",[1201,2671,2672],{"code":2672},"chmod()",[1201,2674,2675],{"code":2675},"stat()",[1201,2677,2678],{"code":2678},"fstat()",[986,2680,2681,2684],{},[989,2682,2683],{},"挂载与链接",[993,2685,2686],{},[986,2687,2688,1778,2691,1778,2694,1778,2697],{},[1201,2689,2690],{"code":2690},"mount()",[1201,2692,2693],{"code":2693},"umount()",[1201,2695,2696],{"code":2696},"link()",[1201,2698,2699],{"code":2699},"unlink()",[986,2701,2702,2705],{},[989,2703,2704],{},"管道\u002F设备\u002F复制 fd",[993,2706,2707],{},[986,2708,2709,1778,2712,1778,2715],{},[1201,2710,2711],{"code":2711},"pipe()",[1201,2713,2714],{"code":2714},"mknod()",[1201,2716,2717],{"code":2717},"dup()",[986,2719,2720,2723],{},[989,2721,2722],{},"进程控制调用（Process control calls）",[993,2724,2725,2742,2766,2781,2799],{},[986,2726,2727,2730],{},[989,2728,2729],{},"创建\u002F执行\u002F结束",[993,2731,2732],{},[986,2733,2734,1778,2736,1778,2739],{},[1201,2735,2593],{"code":2593},[1201,2737,2738],{"code":2738},"execve()",[1201,2740,2741],{"code":2741},"exit()",[986,2743,2744,2747],{},[989,2745,2746],{},"等待与信号",[993,2748,2749],{},[986,2750,2751,1778,2754,1778,2757,1778,2760,1778,2763],{},[1201,2752,2753],{"code":2753},"wait()",[1201,2755,2756],{"code":2756},"kill()",[1201,2758,2759],{"code":2759},"signal()",[1201,2761,2762],{"code":2762},"pause()",[1201,2764,2765],{"code":2765},"alarm()",[986,2767,2768,2771],{},[989,2769,2770],{},"调度与休眠",[993,2772,2773],{},[986,2774,2775,1778,2778],{},[1201,2776,2777],{"code":2777},"sleep()",[1201,2779,2780],{"code":2780},"nice()",[986,2782,2783,2786],{},[989,2784,2785],{},"用户\u002F组\u002F进程组",[993,2787,2788],{},[986,2789,2790,1778,2793,1778,2796],{},[1201,2791,2792],{"code":2792},"setuid()",[1201,2794,2795],{"code":2795},"setgid()",[1201,2797,2798],{"code":2798},"setpgrp()",[986,2800,2801,2804],{},[989,2802,2803],{},"时间相关",[993,2805,2806],{},[986,2807,2808,1778,2811,1778,2814],{},[1201,2809,2810],{"code":2810},"time()",[1201,2812,2813],{"code":2813},"stime()",[1201,2815,2816],{"code":2816},"times()",[1406,2818,2819,2820,2823,2824],{},"看一下",[1201,2821,2822],{"code":2822},"demo_str.c"," 和 ",[1201,2825,2826],{"code":2826},"demo_fork.c",[1406,2828,2829,2832],{},[1201,2830,2831],{"code":2831},"ps -ef | grep xeye","查看进程关系",[1406,2834,2835],{},[1201,2836,2837],{"code":2837},"demo_socket_client \u002Fserver",[978,2839,2841],{"id":2840},"进程间通信-ipc-inter-process-communication-ipc","进程间通信 IPC ｜ Inter-Process Communication (IPC)",[983,2843,2844,2884,2930,2951,2994,3048,3111],{},[986,2845,2846,2849],{},[989,2847,2848],{},"管道（Pipe）",[993,2850,2851,2863],{},[986,2852,2853,2854,1778,2856,1778,2859,1778,2861],{},"典型接口：",[1201,2855,2711],{"code":2711},[1201,2857,2858],{"code":2858},"mkfifo()",[1201,2860,2645],{"code":2645},[1201,2862,2648],{"code":2648},[986,2864,2865,2866],{},"含义：用“字节流”在进程间传数据\n",[993,2867,2868,2873,2878],{},[986,2869,2870,2872],{},[1201,2871,2711],{"code":2711},"：匿名管道（常用于父子进程）",[986,2874,2875,2877],{},[1201,2876,2858],{"code":2858},"：命名管道 FIFO（无亲缘关系进程也可用）",[986,2879,2880,2883],{},[1201,2881,2882],{"code":2882},"read()\u002Fwrite()","：读写数据",[986,2885,2886,2889],{},[989,2887,2888],{},"中断与信号（Interrupt and signal）",[993,2890,2891,2905],{},[986,2892,2853,2893,1778,2895,1778,2898,1778,2901,2904],{},[1201,2894,2756],{"code":2756},[1201,2896,2897],{"code":2897},"sigaction()",[1201,2899,2900],{"code":2900},"sigqueue()",[1201,2902,2903],{"code":2903},"sigwait()","…",[986,2906,2907,2908],{},"含义：用信号做“通知\u002F控制”（更像事件，不适合传大数据）\n",[993,2909,2910,2915,2920,2925],{},[986,2911,2912,2914],{},[1201,2913,2756],{"code":2756},"：发送信号（不一定是“杀死”，取决于信号类型）",[986,2916,2917,2919],{},[1201,2918,2897],{"code":2897},"：设置信号处理方式",[986,2921,2922,2924],{},[1201,2923,2900],{"code":2900},"：带少量数据的排队信号",[986,2926,2927,2929],{},[1201,2928,2903],{"code":2903},"：同步等待某个信号到来",[986,2931,2932,2935],{},[989,2933,2934],{},"消息队列（Message queue）",[993,2936,2937,2948],{},[986,2938,2853,2939,1778,2942,1778,2945,2904],{},[1201,2940,2941],{"code":2941},"mq_open()",[1201,2943,2944],{"code":2944},"mq_send()",[1201,2946,2947],{"code":2947},"mq_close()",[986,2949,2950],{},"含义：内核维护的“消息盒子”，按消息为单位收发（可带优先级等）",[986,2952,2953,2956],{},[989,2954,2955],{},"信号量（Semaphore）",[993,2957,2958,2975],{},[986,2959,2853,2960,1778,2963,1778,2966,1778,2969,1778,2972],{},[1201,2961,2962],{"code":2962},"sem_open()",[1201,2964,2965],{"code":2965},"sem_wait()",[1201,2967,2968],{"code":2968},"sem_post()",[1201,2970,2971],{"code":2971},"sem_close()",[1201,2973,2974],{"code":2974},"sem_unlink()",[986,2976,2977,2978,2981,2982],{},"含义：用于",[989,2979,2980],{},"同步\u002F互斥","（控制谁先做、一次允许几个进程进入），通常配合共享资源使用\n",[993,2983,2984,2989],{},[986,2985,2986,2988],{},[1201,2987,2965],{"code":2965},"：P 操作（资源-1，不够就阻塞）",[986,2990,2991,2993],{},[1201,2992,2968],{"code":2968},"：V 操作（资源+1，唤醒等待者）",[986,2995,2996,2999],{},[989,2997,2998],{},"共享内存（Shared memory）",[993,3000,3001,3018],{},[986,3002,2853,3003,1778,3006,1778,3009,1778,3012,1778,3015],{},[1201,3004,3005],{"code":3005},"shm_open()",[1201,3007,3008],{"code":3008},"ftruncate()",[1201,3010,3011],{"code":3011},"mmap()",[1201,3013,3014],{"code":3014},"munmap()",[1201,3016,3017],{"code":3017},"shm_unlink()",[986,3019,3020,3021,3024,3025],{},"含义：多个进程映射同一块内存，",[989,3022,3023],{},"传输最快","，但需要额外同步（常配合 semaphore）\n",[993,3026,3027,3032,3037,3043],{},[986,3028,3029,3031],{},[1201,3030,3005],{"code":3005},"：创建\u002F打开共享内存对象",[986,3033,3034,3036],{},[1201,3035,3008],{"code":3008},"：设置共享内存大小",[986,3038,3039,3042],{},[1201,3040,3041],{"code":3041},"mmap()\u002Fmunmap()","：映射\u002F解除映射",[986,3044,3045,3047],{},[1201,3046,3017],{"code":3017},"：删除名字（对象最终何时释放取决于引用）",[986,3049,3050,3053],{},[989,3051,3052],{},"套接字（Socket）",[993,3054,3055,3084],{},[986,3056,2853,3057,1778,3060,1778,3063,1778,3066,1778,3069,1778,3072,1778,3075,1778,3078,1778,3081],{},[1201,3058,3059],{"code":3059},"socket()",[1201,3061,3062],{"code":3062},"bind()",[1201,3064,3065],{"code":3065},"getsockname()",[1201,3067,3068],{"code":3068},"connect()",[1201,3070,3071],{"code":3071},"listen()",[1201,3073,3074],{"code":3074},"accept()",[1201,3076,3077],{"code":3077},"send()",[1201,3079,3080],{"code":3080},"recv()",[1201,3082,3083],{"code":3083},"shutdown()",[986,3085,3086,3087],{},"含义：最通用的 IPC（同机\u002F跨网络都能用），支持客户端-服务器模型\n",[993,3088,3089,3095,3100,3106],{},[986,3090,3091,3094],{},[1201,3092,3093],{"code":3093},"listen()\u002Faccept()","：服务端等待连接",[986,3096,3097,3099],{},[1201,3098,3068],{"code":3068},"：客户端发起连接",[986,3101,3102,3105],{},[1201,3103,3104],{"code":3104},"send()\u002Frecv()","：收发数据",[986,3107,3108,3110],{},[1201,3109,3083],{"code":3083},"：半关闭（只关读或只关写）",[986,3112,3113,3116],{},[989,3114,3115],{},"右图含义（Process 相关资源\u002F接口）",[993,3117,3118,3125],{},[986,3119,3120,3121,3124],{},"进程周围有很多“可交互对象\u002F状态”，例如：",[989,3122,3123],{},"文件与管道、标准输入输出、信号、当前目录、环境变量、命令行参数","等",[986,3126,3127,3128,3131],{},"也有一些机制（如 ",[989,3129,3130],{},"socket \u002F shared memory \u002F semaphores \u002F messages","）更偏系统级 IPC（图中提示有的并不直接由 shell 提供）",[978,3133,3135],{"id":3134},"优秀的艺术家会偷-great-artists-steal","优秀的艺术家会“偷” ｜ Great Artists Steal",[993,3137,3138,3148,3158,3168],{},[986,3139,3140,3143],{},[989,3141,3142],{},"理解基本原理｜Understand basic principles",[993,3144,3145],{},[986,3146,3147],{},"先把底层概念搞清楚，再去套用\u002F迁移到新问题。",[986,3149,3150,3153],{},[989,3151,3152],{},"判断能做什么、不能做什么｜Judge what can be done and what cannot",[993,3154,3155],{},[986,3156,3157],{},"明确限制条件（时间\u002F性能\u002F权限\u002F资源\u002F语言特性），避免走不通的方案。",[986,3159,3160,3163],{},[989,3161,3162],{},"抽象与分治｜Make Abstraction \u002F Divide & Conquer",[993,3164,3165],{},[986,3166,3167],{},"把复杂问题拆成小模块（分治），并用统一接口\u002F模型（抽象）来管理复杂度。",[986,3169,3170,3173],{},[989,3171,3172],{},"会在网上找资源｜Know how to find various resources on Internet (GNU, …)",[993,3174,3175],{},[986,3176,3177],{},"能熟练查手册\u002F文档\u002F社区资料（如 GNU 工具链等），快速定位“怎么用\u002F为什么\u002F最佳实践”。",[3179,3180,3182],"h2",{"id":3181},"other-scripts","Other scripts",[978,3184,3186],{"id":3185},"脚本语言哲学scripting-language-philosophy","脚本语言哲学｜Scripting Language Philosophy",[983,3188,3189,3214,3239],{},[986,3190,3191,3194],{},[989,3192,3193],{},"大型、复杂应用（Large, complex applications）",[993,3195,3196,3202,3208],{},[986,3197,3198,3201],{},[989,3199,3200],{},"性能重要","（Performance important）",[986,3203,3204,3207],{},[989,3205,3206],{},"需要结构化","（Need structure）",[986,3209,3210,3213],{},[989,3211,3212],{},"目标：防止坏事发生","（Goal: prevent bad things）",[986,3215,3216,3219],{},[989,3217,3218],{},"交互命令 \u002F 脚本（Interactive commands, scripting）",[993,3220,3221,3227,3233],{},[986,3222,3223,3226],{},[989,3224,3225],{},"性能相对不那么重要","（Performance less important）",[986,3228,3229,3232],{},[989,3230,3231],{},"最小结构","：更少开销、易于互相交换\u002F组合（Minimum structure: less overhead, easy interchange）",[986,3234,3235,3238],{},[989,3236,3237],{},"目标：促成好事发生","（Goal: enable good things）",[986,3240,3241,3244],{},[989,3242,3243],{},"在 ICCAD 领域广泛使用（Widely used in ICCAD area）",[993,3245,3246,3249,3252,3255,3258],{},[986,3247,3248],{},"Tcl\u002FTk",[986,3250,3251],{},"Perl",[986,3253,3254],{},"Python",[986,3256,3257],{},"SKILL",[986,3259,3260],{},"Scala\u002FChisel",[978,3262,3264],{"id":3263},"tcltk-概览tcltk-overview","Tcl\u002FTk 概览｜Tcl\u002FTk Overview",[983,3266,3267,3286],{},[986,3268,3269,3272],{},[989,3270,3271],{},"组件技术（Component technologies）",[993,3273,3274,3280],{},[986,3275,3276,3279],{},[989,3277,3278],{},"Tcl","：可嵌入的脚本语言（embeddable scripting language）",[986,3281,3282,3285],{},[989,3283,3284],{},"Tk","：基于 Tcl 的 GUI 工具包与控件（GUI toolkit and widgets based on Tcl）",[986,3287,3288,3291],{},[989,3289,3290],{},"带来的效果（Results）",[993,3292,3293,3299],{},[986,3294,3295,3298],{},[989,3296,3297],{},"提升 X 编程层次","：更简单，应用开发快 5–10 倍（Raise the level of X programming: simpler, 5–10x faster application development）",[986,3300,3301,3304],{},[989,3302,3303],{},"更强的“粘合\u002F集成”能力","：更多东西可编程，应用之间能协同工作（Greater power: more things programmable, applications work together）",[978,3306,3308],{"id":3307},"双语言方法two-language-approach","双语言方法｜Two-Language Approach",[983,3310,3311,3333],{},[986,3312,3313,3316],{},[989,3314,3315],{},"核心思路（Idea）",[993,3317,3318,3324,3330],{},[986,3319,3320,3323],{},[989,3321,3322],{},"用 Tcl 做脚本\u002F胶水层","（Use Tcl for scripting）",[986,3325,3326,3329],{},[989,3327,3328],{},"用 C 或 C++ 做“大东西\u002F重活”","（C or C++ for large things）",[986,3331,3332],{},"适用场景：随着程序规模、复杂度、复用需求变大，更倾向把核心功能放在 C\u002FC++（Program size, complexity, reuse 越大越偏向 C\u002FC++）",[986,3334,3335,3338],{},[989,3336,3337],{},"Tcl 的特点（Features for Tcl）",[993,3339,3340,3346,3352,3358],{},[986,3341,3342,3345],{},[989,3343,3344],{},"语法最小化","：易学、易写（Minimal syntax: easy to learn and type）",[986,3347,3348,3351],{},[989,3349,3350],{},"结构最小化","：让东西更容易“玩在一起\u002F组合起来”（Minimal structure: make things play together）",[986,3353,3354,3357],{},[989,3355,3356],{},"与 C 的接口简单","：便于扩展（Simple interfaces to C: extensibility）",[986,3359,3360,3363],{},[989,3361,3362],{},"适合交互式命令使用","（Good for interactive command usage）",[1406,3365,3366],{},[1201,3367,3368],{"code":3368},"browse.tcl  helo.tcldef2ver.pcl",{"title":3370,"searchDepth":3371,"depth":3371,"links":3372},"",4,[3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,3388],{"id":980,"depth":3371,"text":981},{"id":1039,"depth":3371,"text":1040},{"id":1134,"depth":3371,"text":1135},{"id":1243,"depth":3371,"text":1244},{"id":1340,"depth":3371,"text":1341},{"id":1433,"depth":3371,"text":1434},{"id":1655,"depth":3371,"text":1656},{"id":1730,"depth":3371,"text":1731},{"id":1855,"depth":3371,"text":1856},{"id":2042,"depth":3371,"text":2043},{"id":2178,"depth":3371,"text":2179},{"id":2290,"depth":3371,"text":2291},{"id":2597,"depth":3371,"text":2598},{"id":2840,"depth":3371,"text":2841},{"id":3134,"depth":3371,"text":3135},{"id":3181,"depth":3389,"text":3182,"children":3390},2,[3391,3392,3393],{"id":3185,"depth":3371,"text":3186},{"id":3263,"depth":3371,"text":3264},{"id":3307,"depth":3371,"text":3308},[903],"Unix 下的 C 编程：详细版笔记","md",null,{"slots":3399},{},{"text":463,"minutes":464,"time":465,"words":466},{"title":460,"description":3395},{"loc":459,"images":3403},[3404,3405,3406],{"loc":1852},{"loc":2048},{"loc":2287},[3408,3409],"Linux","课程笔记","tech","7vMf3itwXxaN55lr0nN2bh4Xg8iL27vSF4e9K21MiHI",[3413,3414],{"title":451,"path":450,"stem":449,"date":452,"type":3410,"children":-1},{"title":608,"path":607,"stem":606,"date":544,"type":3410,"children":-1},1789057285071]