Linux下的C学习笔记

1、linux系统提供的环境
http://blog.csdn.net/feixiaoxing/article/details/7194756
编译:gcc、as、ld
调试:gdb
自动编译:make
os选择:ubuntu、redflag
开源代码库

2、makefile的编写
http://blog.csdn.net/feixiaoxing/article/details/7197095
在UNIX下首先要把源文件编译成中间代码文件,即.o文件,然后再把大量的Object文件合成执行文件,即链接。一般来说,每个源文件都应该对应于一个中间目标文件(o文件)。链接主要是针对函数和全局变量,链接器只管中间文件,由于源文件太多,生成的中间文件也太多,而链接时需要指出中间文件名,所以将中间文件打包即生成“库文件.a”。
clean:不是一个文件,只是一个动作的名字,用于定义不用的编译或是编译无关的命令,如程序的打包、备份等等。

3、gdb调试
http://blog.csdn.net/feixiaoxing/article/details/7199643

4、AT&T汇编语言
http://blog.csdn.net/feixiaoxing/article/details/7201297

5、静态库
http://blog.csdn.net/feixiaoxing/article/details/7202472
静态库是必须要链接到执行文件中去的,删除了静态库对最后的执行文件没有影响;而动态库是不需要链接到最后的执行文件中的,一旦删除,最后的执行文件就gg了。(windows下是* .lib;linux下是 * .o)

6、动态库
http://blog.csdn.net/feixiaoxing/article/details/7203441
(windows下是* .dll;linux下是 * .so)

7、定时器
http://blog.csdn.net/feixiaoxing/article/details/7207894

8、自动编译工具和config.h的生成
http://blog.csdn.net/feixiaoxing/article/details/7211487

9、进程创建
http://blog.csdn.net/feixiaoxing/article/details/7218038
进程是操作系统下面享有资源的基本单位,Linux系统下fork函数可以进行进程创建,并且子进程与父进程之间除了代码是共享的之外,堆栈数据和全局数据均是独立的。

10、进程等待
http://blog.csdn.net/feixiaoxing/article/details/7223024
fork函数创建子进程->wait函数让父进程等待子进程结束后(sleep函数)才开始运行。[注]:Linux下面,sleep函数的参数是秒,而windows下面sleep的函数参数是毫秒。

11、信号处理
http://blog.csdn.net/feixiaoxing/article/details/7226657
相当于中断,[注]:kill函数:送出一个特定的信号给行程 id 为 pid 的行程,根据该信号而做特定的动作。

12、管道通信
http://blog.csdn.net/feixiaoxing/article/details/7229483
进程间通信的方式之一,还有共享内存、socket通信等。
管道通信:创建匿名管道,一个管道发送数据,一个管道接收数据。

13、多线程编程
http://blog.csdn.net/feixiaoxing/article/details/7237649
http://blog.csdn.net/feixiaoxing/article/details/7064559

14、线程等待
http://blog.csdn.net/feixiaoxing/article/details/7240833
pthread_join函数

15、线程互斥
http://blog.csdn.net/feixiaoxing/article/details/7243664
Linux下的pthread_ mutex_t和Windows下的mutex几乎一样的。

[注]:<1> 进程与线程的概念:
进程:程序启动时由操作系统分配的CPU资源和内存资源;
线程:一个进程内部可以同时并发多个线程,线程同样需要分配资源;
各进程之间是独立的,互相不能直接访问,而一个进程内部的线程是可以资源共享的。每一个程序启动时就启动了一个进程,而每个进程必定有一个主线程。

<2>多线程和多进程的区别:(其中之一)进程是Linux内核本身所支持的,而多线程则需要相应的动态库进行支持。对于多进程而言,数据之间都是相互隔离的,而多线程则不同,不同的线程除了堆栈空间之外所有的数据都是共享的。

<3>多线程同步与互斥
http://blog.csdn.net/xp275500976/article/details/7227400
线程同步:线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。
线程间的同步方法大体可分为两类:用户模式和内核模式。内核模式就是指利用系统内核对象的单一性来进行同步,使用时需要切换内核态与用户态,内核模式下的方法有:事件,信号量,互斥量;而用户模式就是不需要切换到内核态,只在用户态完成操作,用户模式下的方法有:原子操作(例如一个单一的全局变量),临界区。

线程互斥:对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥可以看成是一种特殊的线程同步。

当在同一进程中的多线程同步时,临界区是效率最最高,基本不需要什么开销。而内核对象由于要进行用户态和内核态的切换,开销较大,但是内核对象由于可以命名,因此它们同时可以用于进程间的同步。另外,值得一提的是,信号量可以设置允许访问资源的线程或进程个数,而不仅仅是只允许单个线程或进程访问资源。

16、网络编程
http://blog.csdn.net/feixiaoxing/article/details/7259675
<1> OSI 7层网络模型:
应用层-表示层-会话层-传输层-网络层-数据链路层-物理层

<2> TCP/IP模型(12/3/4/567四层)实现了OSI模型中所有功能:
应用层/传输层/网络层/网络接口层

IP是网络层上的主要协议,同时被TCP和UDP协议使用。

<3> 服务器端口以及客户端的处理流程(见原博客)

<4> 子网掩码:判断任意两台计算机的IP地址是否属于同一个子网络,即将两台计算机各自的IP地址与子网掩码进行二进制“与”运算,相同即可直接通讯。

<5> 传输控制协议TCP的“三次握手、四次挥手”

“三次握手”
step1 SYN为1,开始建立请求连接,需对方计算机确认;
step2 对方计算机确认返回的数据包;
step3 对方计算机返回的数据包中ACK为1并且SYN为1,说明同意连接,源计算机确认即可连接。

“四次挥手”
step1 发送一个FIN=1的请求要求断开;
step2 目标主机在得到请求后发送ACK=1进行确认;
step3 确认信息后,发送一个FIN=1的包,与源主机断开;
step4 源主机返回一条ACK=1的信息,会话结束。

<6> 用户数据报协议UDP:为应用程序提供发送和接收数据报的功能,比如腾讯的OICQ。

<7> TCP与UDP的区别:
UDP提供的是非连接的数据报服务,意味着无法保证任何数据报的传递和验证,而TC必须验证目标是否可以访问后才开始通讯;UDP通常每次传输少量数据或者为实时需要的程序提供服务。

TCP与UDP传递数据的比较:
TCP是面向连接的服务,在主机之间建立会话,UDP是无连接的服务,在主机之间不建立会话;TCP通过确认和按顺序传递数据来确保数据的传递,而UDP不能确保或承认数据的传递或序列化数据;TCP比UDP更能确保数据传输的可靠性;TCP较慢,有更高的开销要求,且支持点对点通讯;UDP快速,具有低开销要求,并且支持一点对多点的通讯。
TCP和UDP都使用端口标识TCP/IP程序的通讯。

<8> DNS使用的是UDP协议。需要在主机上设置DNS解析的主机,将主机的DNS解析指向虚拟机,虽然虚拟机并没有设置DNS解析,但只要访问DNS都可以抓到UDP数据报。设置完毕后,在主机的DOS界面输入命令nslookup。

<9> 互联网控制消息协议ICMP(主机与路由器)
Ping命令发送ICMP回应请求消息,检测网络或主机通讯故障并解决常见的TCP/IP连接问题。

<10> FTP服务(default端口20(数据传输)和21(命令传输))
在TCP/IP中FTP服务是非常独特的,因为命令和数据能够同时传输,而数据传输是实时的,其它协议不具有该特性。

<11> Talnet服务:为用户提供了一种通过网络登陆远程服务器方式(端口23)。

<12> Email服务的两种协议:简单邮件传输协议SMTP和邮局协议POP3。

<13> 常用的网络服务端口:21,25,53,80,135,137,138,139,443,445,3389。

<14> 常用的网络连接命令:ping(判断主机是否连接),ipconfig(查看IP地址配置),netstat(查看网络连接配置),net(查看网络连接操作),at(定时器操作)。

<15> PB:platform builder 基于Win CE平台下嵌入式操作系统定制的集成开发环境。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值