- 浏览: 103201 次
- 性别:
- 来自: 北京
博客专栏
-
unix环境高级编程
浏览量:22697
最新评论
-
zhangzl4321:
你的这些书我感觉我一本都买不起,我买书一般都是20块以内的
UNIX-LINUX编程书籍 -
zhangzl4321:
好全面啊,世界一流程序员的水准
UNIX-LINUX编程书籍 -
kellyseeme:
谢谢。。。。。。。
Oracle9i Database Administration Fundamentals 中文版与英文版 【电子书】 -
lxs647:
还没有试过、、、估计也不小吧、、、myeclipse9
MyEclipse9 完成破解 -
oolala:
jackytang520 写道其实IntelliJ IDEA可 ...
MyEclipse9 完成破解
文章列表
如何学习linux下c语言编程
- 博客分类:
- Unix环境高级编程
一、工具的使用
1、学会使用vim/emacs,vim/emacs是linux下最常用的源码编辑具,不光要学会用它们编辑源码,还要学会用它们进行查找、定位、替换等。新手的话推荐使用vim,这也是我目前使用的文本编辑器。
2、学会makefile文件的编写规则,并结合使用工具aclocal、autoconf和automake生成makefile文件。
3、掌握gcc和gdb的基本用法。掌握gcc的用法对于构建一个软件包很有益处,当软件包包含的文件比较多的时候,你还能用gcc把它手动编译出来,你就会对软件包中各个文件间的依赖关系有一个清晰的了解。
4、掌握svn/cvs的 ...
1、socket函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
domain参数指明协议族,该参数也往往被称为协议域
type 参数指明套接字类型
protocol协议类型
socket函数domain常值
AF_INET IPV4协议
AF_IN ...
1、套接字地址结构
ipv4套接字地址结构
<netinet/in.h>
struct in_addr
struct sockaddr_in
2、通用套接字地址结构
<sys/socket.h>
struct sockaddr
3、值-结果参数
从进程到内核传递套接字地址 ...
1、总图
udp是一个简单的、不可靠的数据报协议,而tcp是一个复杂、可靠的字节流协议
TCP的某些特性一旦理解,就很容易编写健壮的客户和服务器程序。
TCP三路握手、TCP连接终止序列、TCP的TIME_WAIT状态
套接字层提供的 ...
UNIX-LINUX编程书籍
- 博客分类:
- 资料推荐
排名不分先后:
1. C语言:
高质量程序设计指南
C语言接口与实现
C语言解惑
C专家编程
C陷阱与缺陷
C语言参考手册
2. Linux应用开发
Unix网络编程(第1,2卷)
Unix环境高级编程
Linux系统编程
Unix/Linux ...
《UNIX系统编程》第三章 笔记
1、进程标识
UNIX用惟一的被称为进程ID的整数值来标识进程。
每个进程还有一个父进程ID,这个父进程ID最初是创建它的那个进程的进程ID。
如果这个父进程终止,进程就由一个 ...
Makefile样例
- 博客分类:
- Unix环境高级编程
.PHONY:clean
CC=gcc
CFLAGS=-Wall -g
BIN=miniftpd
OBJS=main.o sysutil.o session.o ftpproto.o privparent.o str.o tunable.o parseconf.o
LIBS=-lcrypt
$(BIN):$(OBJS)
$(CC) $(CFLAGS) $^ -o $@ $(LIBS)
%.o:%.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f *.o $(BIN)
1、设备就像文件
对unix来说,声卡、终端、鼠标和磁盘文件是同一种对象。在unix系统中,每个设备都被当做一个文件。每个设备都有一个文件名、一个i-节点号、一个文件所有者、一个权限位的集合和最近修改时间。文件有关的所有内容都将运用于终端和其他的设备。
2、设备具有文件名
每个加载到unix机器的设备(终端、打印机、鼠标、磁盘)都通过文件名表示。表示设备的文件名存放在目录/dev
ls /dev
lp * 文件是打印机
fd * 文件是软驱
sd * 文件旬scsi设备的分区
/dev/tape磁带备份驱动程 ...
malloc、free与内存碎片
- 博客分类:
- Unix系统编程
malloc和free大量使用后回造成内存碎片,那么这种碎片形成的机理是什么? 如果机理是申请的内存空间大小(太小)所形成的,那么,申请多大的区域能够最大限度的避免内存碎片呢?(这里的避免不是绝对的避免,只是一种概率)
内存碎片一般是由于空闲的连续空间比要申请的空间小,导致这些小内存块不能被利用。 产生内存碎片的方法很简单,举个例: 假设有一块一共有100个单位的连续空闲内存空间,范围是0~99。如果你从中申请一块内存,如10个单位,那么申请出来的内存块就为0~9区间。这时候你继续申请一块内存,比如说5个单位大,第二块得到的内存块就应该为10~14区间。 ...
1、非阻塞IO
系统调用分成“低速”系统调用和其他系统调用。低速系统调用是可能会使进程永远阻塞的一类系统调用
1)如果某些文件类型(管道、终端设备、网络设备)的数据不存在,则读操作可能会使调用者永远阻塞
2)如果数据不能立即被上述同样类型的文件接受,则写操作也会使调用者永远阻塞。
3)在某种条件发生之前,打开某些类型的文件会被阻塞
4)对已经加上强制性记录锁的文件进行读、写
5)某些进程间通信函数
非阻塞IO使我们可以调用open read write这样的IO操作,并使这些操作不会永远阻塞。
给定的描述符指 ...
1 守护进程
守护进程也称精灵进程(daemon)是生存期较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。
因为没的控制终端,所以它们是在后台运行的。
2、守护进程特征
父进程ID为0的各进程通用是内核进程,它们作为系统自举过程中的一部分启动
内核进程是特殊的,通用存在于系统的整个生命周期。它们以超级用户特权运行,无控制终端,无命令行。
进程1通常是init,它是一个系统守护进程,负责启动各运行层次特定的系统服务。
portmap网络端口映射服务
syslogd守护进程把系统消息记入日志 ...
1、线程概念
线程包含了表示进程内执行环境必须的信息,其中包括进程中标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。
2、线程标识
线程ID用pthread_t数据类型表示
必须使用函数对二个线程ID进行比较
#include <pthread.h>
int pthread_equal(pthread_t t1, pthre ...
信号是软件中断,信号提供了一种处理异步事件的方法。
1、信号概念
每个信号都有一个名字,这些名字都以三个字符SIG开头。
SIGABRT是夭折信号,当进程调用abort函数时产生这种信号
SIGALRM是闹钟信号,当由alarm函数设置的计时器超时后产生此信号。
在头<signal.h>中,这些信号都被定义为正整数(信号编号).
很多条件可以产生信号 :
a)当用户按某些终端键时,引发终端产生信号
ctrl+c产生中断信号(SIGINT)
b)硬件异常产生信号:除数为0、无效内存引 ...
1、进程组
#include <unistd.h>
pid_t getpgrp(void); 返回值:调用进程的进程组ID
每个进程组都可以有一个组长进程。组长进程标识是,其进程组ID等于其进程ID
组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中有一个进程存在,则该进程组就存在,这与进程组长进程是否终止无关。
#include <unistd.h>
int setpgid(pid_t pid,pid_t pgid);
setpgid函 ...
1、进程标识符
每个进程都有一个非负整型表示的唯一进程ID。
ID为0的进程通常是调度进程,常常被称为交换进程(swapper)。
ID为1通常是init进程,在自举过程结束时由内核调用。该进程文件在/etc/init
#include <unistd.h>
gid_t getegid(void); 获取有效用户ID
uid_t geteuid(void);
git_t getgid(void);
uid_t getuid(void); 获取真实用户ID
2、fork
#inc ...