设为首页 加入收藏

TOP

Linux C程序设计大全 目录
2013-10-12 06:52:39 来源: 作者: 【 】 浏览:81
Tags:Linux 程序设计 大全 目录

目录

第1篇  Linux下C语言基础
第1章  Linux简介 2
1.1  GNU简介 2
1.2  Linux简介 2
1.2.1  Linux发展史 2
1.2.2  Linux发行版 4
1.2.3  Linux内核版本 5
1.2.4  Linux与UNIX的关系 5
1.2.5  Linux在服务器方面的发展 5
1.2.6  Linux在嵌入式系统方面的发展 6
1.2.7  Linux在桌面系统方面的发展 7
1.3  Linux环境下的其他编程语言 7
1.3.1  C++ 7
1.3.2  Java 10
1.3.3  Perl 12
1.3.4  Python 13
1.3.5  Ruby 14
1.3.6  PHP 14
第2章  控制结构 17
2.1  goto语句 17
2.1.1  C语言中的无条件跳转 17
2.1.2  使用goto语句进行出错处理 18
2.1.3  出错处理的一般模型 20
2.2  C语言中的分支结构 21
2.2.1  分支结构的翻译 22
2.2.2  使用goto语句实现分支结构 23
2.3  短路计算 24
2.3.1  短路计算 24
2.3.2  &&运算的短路计算 25
2.3.3  ||运算的短路计算 26
2.4  C语言中的循环结构 28
2.4.1  while循环 28
2.4.2  do…while循环 30
2.4.3  for循环 32
2.5  switch语句 34
2.5.1  switch语句的应用 34
2.5.2  使用goto语句实现switch语句 35
2.6  优化控制结构 37
2.6.1  表达式优化--使用替换程序中的乘除法 37
2.6.2  表达式优化--常量折叠 38
2.6.3  表达式优化--使用数学公式 38
2.6.4  表达式优化--存储问题 40
2.6.5  分支优化--改变判断顺序 40
2.6.6  分支优化--使用switch语句 44
2.6.7  循环优化--一次性计算 46
第3章  C语言中的函数 49
3.1  函数的本质 49
3.2  变量的作用域和生命期 50
3.2.1  全局变量 50
3.2.2  局部变量 51
3.3  变量的初始值 53
3.3.1  全局变量的初始值 53
3.3.2  局部变量的初始值 54
3.4  与函数有关的优化 55
3.4.1  函数调用与程序优化 55
3.4.2  变量存储优化 58
3.5  编写多文件程序--变量的存储类别 60
3.5.1  存储类别 60
3.5.2  static变量的作用--改变变量的生命期 60
3.5.3  static变量的作用--实现封装和模块化设计 63
3.6  编写多文件的程序--链接的作用 66
3.6.1  链接多个文件 66
3.6.2  链接时符号解析规则 68
3.6.3  链接规则的应用 68
3.7  可变参数 72
3.7.1  可变参数的概念 72
3.7.2  实现一个简单的可变参数的函数 73
3.7.3  可变参数实例 75
3.7.4  关于printf函数的疑问--缺少整型参数 80
3.7.5  关于printf函数的疑问--缺少字符串地址参数 81
第4章  C语言中的指针与字符串 84
4.1  sizeof运算符 84
4.1.1  sizeof运算符的应用--得到内置类型的大小 84
4.1.2  sizeof运算符的应用--得到复合类型的大小 85
4.2  指针的应用 86
4.2.1  指针与别名陷阱 86
4.2.2  数组的指针 88
4.2.3  指针的指针 90
4.2.4  指针与参数传递 91
4.2.5  指针类型的意义 98
4.2.6  void*型指针 100
4.3  函数的指针 103
4.3.1  C语言中的函数指针 103
4.3.2  函数指针的应用--回调函数 106
4.3.3  函数指针数组 111
4.4  字符串 113
4.4.1  字符串与字符数组 113
4.4.2  字符串与指针 114
4.4.3  限定修饰符const 116
4.4.4  const关键字修饰指针--在指针定义之前 117
4.4.5  const关键字修饰指针--在指针定义之中 117
4.4.6  const关键字修饰指针--在指针定义之前和定义之中 118
4.4.7  使用const关键字的意义 119
第5章  C语言的高级技术 122
5.1  结构体与共同体 122
5.1.1  结构体中成员变量的存储分布 122
5.1.2  内存对齐 123
5.2  位运算 126
5.2.1  掩码运算 127
5.2.2  不安全的位运算 129
5.2.3  异或运算的特性 130
5.2.4  移位运算的陷阱 133
5.2.5  移位运算的实例 134
5.3  预处理 136
5.3.1  常用的代码组织形式 136
5.3.2  调试开关 142
5.4  C99新标准关键字详解 145
5.4.1  inline关键字的概念 145
5.4.2  inline关键字实例 145
5.4.3  inline关键字使用总结 146
5.4.4  restrict关键字的概念 147
5.4.5  restrict关键字的应用 148
第2篇  C语言开发环境
第6章  vi与vim编辑器 152
6.1  vi编辑器入门 152
6.1.1  vi简介 152
6.1.2  vi的工作模式 152
6.2  vi一般操作 153
6.2.1  进入vi 153
6.2.2  文本插入操作 156
6.2.3  文本删除操作 158
6.2.4  文本复制操作 159
6.2.5  撤销命令 161
6.2.6  重复命令 162
6.2.7  退出vi 162
6.3  vi的增强操作 164
6.3.1  替换命令 164
6.3.2  光标移动 165
6.3.3  按行移动光标 166
6.3.4  按字移动光标 167
6.3.5  按句移动光标 168
6.3.6  按段移动光标 169
6.3.7  文本行的移动 169
6.3.8  文本的异行移动 170
6.3.9  屏幕滚动 171
6.3.10  查找命令 171
6.3.11  替换命令 173
6.3.12  窗口的切分 175
6.3.13  设置环境 176
第7章  gcc编译器 177
7.1  初探gcc编译器 177
7.1.1  从经典的hello world开始 177
7.1.2  gcc编译流程 178
7.2  gcc常用选项 179
7.2.1  gcc常用选项汇总 179
7.2.2  -c选项 179
7.2.3  -S选项 180
7.2.4  -E选项 182
7.2.5  -o选项 182
7.2.6  -I选项 183
7.2.7  -g选项 183
7.3  链接原理 183
7.3.1  链接器的任务 183
7.3.2  目标文件 184
7.3.3  ELF格式的可重定位目标文件 185
7.3.4  目标文件中的符号表 187
7.3.5  重定位的概念 191
7.3.6  符号的重定位信息 192
7.4  关于库 192
7.4.1  使用库的优势 192
7.4.2  静态库的概念 194
7.4.3  创建静态库 194
7.4.4  使用静态库 195
7.4.5  动态库的概念 197
7.4.6  创建动态库 197
7.4.7  使用动态库 199
7.5  gcc工具链 201
第8章  makefile 203
8.1  makefile文件入门 203
8.1.1  makefile文件的组成内容 203
8.1.2  makefile文件包含 203
8.1.3  make工具的退出码 204
8.2  书写makefile规则 205
8.2.1  使用基本规则 205
8.2.2  使用隐式规则 206
8.2.3  使用伪目标 207
8.2.4  使用通配符 209
8.2.5  搜索源文件 209
8.3  使用命令 210
8.3.1  显示命令 211
8.3.2  执行命令 211
8.3.3  命令出错 212
8.4  使用变量 213
8.4.1  使用普通变量 213
8.4.2  变量中的变量 215
8.4.3  追加变量的值 217
8.4.4  自动化变量 218
8.5  使用条件判断 219
8.5.1  条件表达式 219
8.5.2  表达式实例 221
8.6  使用函数 221
8.6.1  函数调用的语法 222
8.6.2  字符串处理函数 222
8.6.3  文件名操作函数 229
8.6.4  foreach函数 233
8.6.5  if函数 233
8.6.6  call函数 234
8.6.7  origin函数 235
8.6.8  shell函数 235
8.7  makefile实例 236
8.7.1  makefile实例--项目中的总makefile 236
8.7.2  makefile实例--makefile模板 238
第9章  gdb 240
9.1  列出源程序 240
9.1.1  不带参数的list命令 240
9.1.2  带一个参数的list命令 241
9.1.3  带两个参数的list命令 242
9.2  运行程序的命令 243
9.3  操作断点的命令 244
9.3.1  设置断点 244
9.3.2  显示当前gdb的断点信息 247
9.3.3  删除指定的断点 247
9.3.4  禁止或启用断点 248
9.3.5  清除断点 248
9.3.6  观察点 249
9.3.7  设置断点实例 250
9.4  查看运行时数据 254
9.4.1  数据观察命令 254
9.4.2  对程序中函数的调用 256
9.4.3  查看表达式的值 256
9.4.4  查看数组的值 257
9.4.5  变量的输出格式 257
9.4.6  查看内存 258
9.4.7  自动显示变量 259
9.4.8  设置显示选项 263
9.4.9  显示变量的历史记录 265
9.4.10  查看寄存器 266
9.4.11  查看使用gdb环境变量 267
9.4.12  查看数据实例 268
9.5  改变程序的执行 273
9.5.1  修改变量的值 273
9.5.2  跳转执行 274
9.5.3  信号的产生及处理 275
9.5.4  强制调用函数 276
9.5.5  强制函数返回 276
9.6  gdb高级应用 278
9.6.1  产生core文件 278
9.6.2  跟踪栈上数据 278
9.6.3  绑定运行进程 281
9.6.4  源文件搜索 283
9.6.5  机器语言工具 283
9.6.6  其他有用的调试命令 284
第3篇  Linux进程操作
第10章  进程环境 288
10.1  程序的启动和退出 288
10.1.1  在shell中启动一个程序 288
10.1.2  加载一个程序 289
10.1.3  加载地址 290
10.1.4  退出程序 291
10.1.5  进程终止处理函数 292
10.2  Linux进程内存管理 294
10.2.1  数据的内部存储 294
10.2.2  C程序的存储布局--代码段 296
10.2.3  C程序的存储布局--数据段和缓冲段 298
10.2.4  C程序的存储布局--栈 299
10.2.5  C程序的存储布局--堆 301
10.2.6  常量的存储 302
10.2.7  动态内存管理 302
10.2.8  动态内存分配的深入研究 305
10.3  shell环境 309
10.3.1  命令行参数 310
10.3.2  得到程序文件名 311
10.3.3  环境变量 312
10.3.4  得到指定的环境变量 314
10.3.5  设置一个环境变量 315
10.3.6  得到进程结束状态 320
10.3.7  使用errno调试程序 322
10.3.8  输出错误原因 324
10.4  全局跳转 325
10.4.1  局部跳转的局限性 326
10.4.2  使用全局跳转 327
10.4.3  使用全局跳转代替局部跳转 329
第11章  进程控制 332
11.1  进程标识符 332
11.1.1  进程ID 332
11.1.2  进程中重要的ID值 333
11.2  进程操作 335
11.2.1  创建一个进程 335
11.2.2  父子进程的共享资源 337
11.2.3  fork函数的出错情况 340
11.2.4  创建一个共享空间的子进程 341
11.2.5  在函数内部调用vfork函数 342
11.2.6  退出进程 344
11.2.7  使用exit函数检查进程出错信息 345
11.2.8  exit函数与内核函数的关系 346
11.2.9  设置进程所有者 346
11.2.10  调试多进程--设置跟踪流 348
11.2.11  调试多进程--使用gdb的attach命令 348
11.3  执行程序 349
11.3.1  执行一个新程序 350
11.3.2  执行解释器文件 352
11.3.3  在程序中执行shell命令 355
11.3.4  实现system函数 356
11.4  关系操作 358
11.4.1  等待进程退出 358
11.4.2  等待指定的进程 362
11.4.3  僵尸进程的概念 364
11.4.4  产生一个僵尸进程 364
11.4.5  避免僵尸进程的产生 366
11.4.6  输出进程统计信息 369
第12章  时间和日历历程 372
12.1  系统时间 372
12.2  日历时间 374
第13章  信号及信号处理 378
13.1  信号的基础 378
13.1.1  信号的基本概念 378
13.1.2  产生信号 379
13.1.3  处理信号 379
13.1.4  常用信号的使用方法 380
13.2  信号的影响 382
13.2.1  重入 382
13.2.2  原子操作 385
13.2.3  中断系统调用 387
13.3  信号处理函数 387
13.3.1  设置信号处理函数 387
13.3.2  发送信号 391
13.3.3  向进程本身发送信号 392
13.3.4  设置Linux定时器 393
13.3.5  定时等待I/O 395
13.3.6  挂起进程 397
13.3.7  进程休眠 399
13.4  信号集与屏蔽信号 402
13.4.1  信号集和信号集处理函数 402
13.4.2  屏蔽信号 404
13.4.3  处理未决信号 406
13.4.4  高级信号注册函数 409
13.4.5  信号选项实例--SA_NOCLDWAIT选项 410
13.4.6  信号选项实例--SA_NODEFFER选项 412
13.4.7  信号选项实例--SA_RESETHAND选项 414
第14章  进程间通信 416
14.1  进程间通信概述 416
14.1.1  进程间通信简介 416
14.1.2  进程间通信的难点 417
14.1.3  IPC的多种方式 417
14.2  管道 418
14.2.1  管道的概念 418
14.2.2  匿名半双工管道 418
14.2.3  匿名半双工管道的读写操作 420
14.2.4  创建管道的标准库函数 423
14.3  FIFO管道 426
14.3.1  FIFO的概念 426
14.3.2  创建FIFO 427
14.3.3  FIFO的读写操作 428
14.3.4  FIFO的缺点 432
14.4  System V IPC/POSIX IPC 433
14.4.1  IPC对象的概念 433
14.4.2  IPC对象的问题 435
14.4.3  IPC对象系统命令 435
14.5  共享内存 436
14.5.1  共享内存的概念 436
14.5.2  共享内存的创建 437
14.5.3  共享内存的操作 439
14.5.4  共享内存使用注意事项 442
14.6  信号量 442
14.6.1  信号量的概念 442
14.6.2  信号量的创建 443
14.6.3  信号量集的操作 446
14.7  消息队列 448
14.7.1  消息队列的概念 448
14.7.2  创建消息队列 449
14.7.3  读写消息队列 452
第15章  线程 456
15.1  线程与进程 456
15.1.1  线程的概念 456
15.1.2  线程的优势 457
15.2  线程标识符 458
15.3  线程基本操作 458
15.3.1  创建线程 458
15.3.2  向线程体函数传递参数 460
15.3.3  线程访问资源的限制 462
15.3.4  终止线程 466
15.3.5  正确得到线程退出信息的方法 470
15.3.6  取消一个线程的运行 473
15.3.7  线程退出函数 476
第16章  线程高级操作 480
16.1  线程同步--使用互斥量 480
16.1.1  初始化与销毁互斥量 480
16.1.2  得到与释放互斥量 481
16.1.3  使用互斥量的实例 482
16.2  线程同步--使用读写锁 489
16.2.1  初始化与销毁读写锁 489
16.2.2  得到与释放互斥锁 490
16.2.3  使用互斥量与读写锁的比较 491
16.3  线程属性 499
16.3.1  创建和销毁属性结构 499
16.3.2  线程的分离状态 500
16.3.3  分离一个已经创建的线程 502
16.3.4  线程栈的属性 503
第4篇  Linux文件操作
第17章  文件I/O 508
17.1  文件描述符的概念 508
17.2  文件I/O操作 508
17.2.1  打开一个文件 508
17.2.2  打开文件的出错情况 512
17.2.3  关闭一个文件 513
17.2.4  创建一个新文件 514
17.2.5  文件定位 515
17.2.6  文件截短 517
17.2.7  清空一个文件 521
17.2.8  文件的读写操作 523
17.2.9  文件同步 527
17.3  文件描述符操作 529
17.3.1  复制文件描述符 529
17.3.2  I/O重定向概念及其应用 531
17.3.3  控制文件 534
17.3.4  修改打开文件的文件状态 535
17.4  非阻塞文件I/O 538
17.4.1  非阻塞I/O的概念 538
17.4.2  以非阻塞方式打开文件 539
17.4.3  将一个打开文件设置为非阻塞方式 541
17.5  内存映射I/O 543
17.5.1  内存映射I/O的概念 543
17.5.2  创建一个内存映射 544
17.5.3  撤销一个内存映射 547
17.5.4  内存映射同步 549
17.5.5  更改内存映射的权限 552
第18章  文件管理 555
18.1  文件状态 555
18.2  文件类型 556
18.3  文件权限 559
18.3.1  访问权限 559
18.3.2  设置用户ID位和设置组ID位 561
18.3.3  设置用户ID位的作用 562
18.3.4  使用设置用户ID位的实例 562
18.4  文件权限操作 566
18.4.1  测试文件访问权限 566
18.4.2  设置用户ID位与文件权限测试 568
18.4.3  使用文件权限屏蔽字 569
18.4.4  在shell中使用文件权限屏蔽字 570
18.4.5  在程序中使用文件权限屏蔽字 570
18.4.6  改变文件访问权限 572
18.4.7  在shell中改变文件权限 573
18.4.8  在程序中改变文件权限 574
18.4.9  改变一个打开的文件权限 575
18.5  文件系统结构 579
18.6  文件的硬链接 583
18.6.1  创建一个硬链接 584
18.6.2  删除一个硬链接 585
18.7  改变文件所有者 589
18.8  操作文件的时间 593
第19章  目录操作 597
19.1  目录的权限 597
19.1.1  目录的访问权限 597
19.1.2  测试目录的访问权限 598
19.2  目录操作 599
19.2.1  创建一个目录 599
19.2.2  删除一个目录 600
19.2.3  目录项结构 601
19.2.4  打开与关闭目录 602
19.2.5  读目录 603
19.2.6  读目录操作的实例--实现自己的ls命令 606
19.2.7  得到目录文件的读写位置 608
19.2.8  定位目录 610
19.2.9  回卷目录文件 611
19.3  进程的工作目录 612
19.3.1  工作目录的概念 613
19.3.2  改变进程的工作目录 613
19.3.3  得到进程的当前工作目录 615
19.3.4  子进程工作目录对父进程的影响 618
第20章  特殊文件 622
20.1  符号链接操作 622
20.1.1  符号链接 622
20.1.2  符号链接的功能 622
20.1.3  创建符号链接 623
20.1.4  创建指向不存在文件的符号链接 625
20.1.5  读写符号链接的目的文件 626
20.1.6  读写多重符号链接的目的文件 628
20.1.7  读写符号链接 630
20.1.8  取得符号链接的状态 633
20.1.9  更改符号链接的所有者 637
20.2  proc文件系统 642
20.2.1  proc文件系统 642
20.2.2  常用的内核信息 642
20.2.3  读取内核信息 644
20.2.4  进程状态信息 652
20.2.5  读取进程状态 653
20.2.6  proc文件系统变成实例--实现自己的ps命令 655
第21章  基于流的I/O 658
21.1  流与缓冲 658
21.2  基于流的文件操作 660
21.2.1  打开和关闭流 660
21.2.2  文件内容的冲洗 662
21.2.3  以字符为单位读写数据 664
21.2.4  以行为单位读写数据 666
21.2.5  gets函数的漏洞 667
21.2.6  逐行读取文件内容 668
21.2.7  输出xml形式的配置文件 669
21.2.8  读写数据块 671
21.2.9  文件读写实例--实现cp命令 672
21.2.10  文件读写实例--字符统计 674
21.2.11  文件读写实例--目录下所有文件的字符统计 675
第5篇  Linux网络编程
第22章  TCP和UDP协议 680
22.1  计算机网络的体系结构简介 680
22.1.1  计算机网络体系结构简介 680
22.1.2  OSI 参考模型中各层功能描述 680
22.1.3  TCP/IP参考模型的各层功能描述 681
22.1.4  面向连接服务和无连接服务 682
22.2  客户/服务器方式简介 682
22.3  用户数据报协议UDP 683
22.3.1  用户数据报的格式 683
22.3.2  用户数据报检验和的计算 684
22.3.3  UDP用户数据报的特性及用途 686
22.4  传输控制协议 TCP 686
22.4.1  TCP简介 686
22.4.2  TCP报文段的首部 686
22.4.3  TCP数据编号与确认 688
22.4.4  TCP的流量控制与拥塞控制 688
22.4.5  TCP的运输连接管理 690
第23章  网络编程基础 693
23.1  套接字概念 693
23.2  准备工作 694
23.2.1  字节序 694
23.2.2  地址格式 695
23.2.3  地址形式转换 697
23.2.4  获得主机信息 698
23.2.5  地址映射 700
23.3  套接字基础编程 701
23.3.1  建立和销毁套接字描述符 701
23.3.2  地址绑定 703
23.3.3  建立一个连接 704
23.3.4  最简单的网络应用程序--服务器端 707
23.3.5  最简单的网络应用程序--客户端 710
23.3.6  使用文件读写函数读写套接字 713
23.3.7  使用完整读写函数的网络应用程序 716
23.3.8  面向连接的数据传输 720
23.3.9  面向连接的网络应用程序--服务器端 721
23.3.10  面向连接的网络应用程序--客户端 724
23.3.11  无连接的数据传输 727
23.3.12  无连接的网络应用程序--服务器端 729
23.3.13  无连接的网络应用程序--客户端 731
23.4  非阻塞套接字 734
23.4.1  非阻塞网络应用程序--服务器端 734
23.4.2  非阻塞网络应用程序--客户端 737
第24章  网络编程进阶 740
24.1  套接字编程深入 740
24.1.1  bind函数的作用 740
24.1.2  并发服务器 741
24.1.3  UDP协议的connect函数应用 743
24.2  多路选择I/O 746
24.2.1  多路选择I/O的概念 746
24.2.2  实现多路选择I/O 747
24.2.3  使用多路选择I/O处理多个连接 750
24.2.4  屏蔽信号的多路选择I/O 754
24.2.5  对比select函数和pselect函数 755
24.2.6  轮询I/O 758
24.3  非网络通信套接字 759
24.3.1  非命名UNIX域套接字 759
24.3.2  命名UNIX域套接字 761
24.3.3  UNIX域套接字实例--服务器端 762
24.3.4  UNIX域套接字实例--客户端 766
第25章  网络编程实例--实现文件传输程序 769
25.1  程序设计 769
25.1.1  整体程序设计 769
25.1.2  客户端程序设计 769
25.1.3  服务器端程序设计 770
25.2  文件传输程序的实现 773
25.2.1  客户端程序的实现--头文件 773
25.2.2  客户端程序的实现--程序主函数 774
25.2.3  客户端程序的实现--命令拆分函数 777
25.2.4  客户端程序的实现--命令处理模块 779
25.2.5  服务器端程序的实现--头文件 790
25.2.6  服务器端程序的实现--程序主函数 791
25.2.7  服务器端程序的实现--客户端命令处理模块 794
25.3  测试和验证 801
第26章  网络编程实例--简单的Web服务器 802
26.1  程序设计 802
26.1.1  整体程序设计 802
26.1.2  步骤1--解析客户端发送的内容 803
26.1.3  步骤2--寻找客户端需要的文件 804
26.1.4  步骤3--将客户端信息返回 804
26.2  Web服务器的实现 805
26.2.1  Web服务器程序的实现--头文件 806
26.2.2  Web服务器程序的实现--程序主函数 806
26.2.3  Web服务器程序的实现--请求处理模块 811
26.3  测试和验证 816
第6篇  shell脚本知识
第27章  shell脚本基础 818
27.1  编写最简单的shell脚本 818
27.1.1  使用shell脚本的原因 818
27.1.2  脚本内容 819
27.1.3  运行一段脚本 820
27.2  shell中的变量 821
27.2.1  用户自定义变量 821
27.2.2  引用变量 823
27.2.3  为表达式求值 824
27.2.4  变量的类型 826
27.2.5  操作自定义变量 828
27.2.6  位置变量 830
27.2.7  重新分配位置变量 831
27.3  退出状态 833
27.4  条件测试 835
27.4.1  测试文件状态 835
27.4.2  测试时使用逻辑操作符 837
27.4.3  字符串测试 839
27.4.4  测试数值 841
第28章  shell脚本中的控制结构 844
28.1  shell脚本中的命令替换 844
28.2  分支结构 845
28.2.1  if/else分支结构 845
28.2.2  多重分支结构 847
28.2.3  使用case结构的分支语句 848
28.2.4  在case语句中使用逻辑表达式 851
28.3  条件测试命令的值 853
28.3.1  测试整数与字符串 853
28.3.2  测试字符串和空值 854
28.3.3  测试未初始化的变量 855
28.3.4  测试"false"的值 856
28.4  循环结构 857
28.4.1  while循环结构 858
28.4.2  until循环结构 861
28.4.3  for循环结构 864
28.4 4  break和continue命令 866
28.5  定义函数和使用函数 869


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux C程序设计大全 前言 下一篇Linux下几种被忽略的编程语言

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: