`
oolala
  • 浏览: 99965 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
09c341db-7f05-3f2b-a572-9ee69a5d8a77
unix环境高级编程
浏览量:21722
社区版块
存档分类
最新评论
文章列表
一、工具的使用 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状态 套接字层提供的 ...
排名不分先后:   1. C语言: 高质量程序设计指南 C语言接口与实现 C语言解惑 C专家编程 C陷阱与缺陷 C语言参考手册       2. Linux应用开发 Unix网络编程(第1,2卷) Unix环境高级编程 Linux系统编程 Unix/Linux ...
《UNIX系统编程》第三章 笔记   1、进程标识     UNIX用惟一的被称为进程ID的整数值来标识进程。     每个进程还有一个父进程ID,这个父进程ID最初是创建它的那个进程的进程ID。     如果这个父进程终止,进程就由一个 ...
.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大量使用后回造成内存碎片,那么这种碎片形成的机理是什么?     如果机理是申请的内存空间大小(太小)所形成的,那么,申请多大的区域能够最大限度的避免内存碎片呢?(这里的避免不是绝对的避免,只是一种概率)   内存碎片一般是由于空闲的连续空间比要申请的空间小,导致这些小内存块不能被利用。     产生内存碎片的方法很简单,举个例:         假设有一块一共有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 ...
Global site tag (gtag.js) - Google Analytics