Unix环境高级编程笔记

1、操作系统 一种软件,控制计算机硬件资源,提供程序运行环境。
2、内核的接口是系统调用。
3、我们可以替换库函数,而通常却不能替换系统调用.(比如:库函数malloc用来分配内存,它肯定会调用系统调用中的负责处理器分配的sbrk系统调用.但是我们如果不喜欢malloc函数,我们就可以写自己的内存分配函数.但在我们定义的函数中肯等会用到sbrk系统调用)—–内核中的系统调用sbrk分配另外一块空间给进程,而库函数malloc则在用戶层次管理这一空间。
4、原子操作指的是多步组成的一个操作,要么执行完所有步骤,要么一步都不执行。
5、文件类型:普通文件,目录文件,块特殊文件,字符特殊文件,FIFO(命名管道),套接字,符号链接。
6、文件访问权限:chmod
0-无权限 1-可执行 2-可写 4-可读
chmod u+x file
给file的属主增加执行权限
chmod 751 file; chmod u=rwx,g=rx,o=x file
给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
chmod =r file; chmod 444 file ;chmod a-wx,a+r file
为所有用户分配读权限
chmod -R u+r directory
递归地给directory目录下所有文件和子目录的属主分配读的权限
chmod 4755 (4表示设置用户ID)
设置用ID,给属主分配读、写和执行权限,给组和其他用户分配读、执行的权限。
7、缓冲:三种类型 全缓冲 行缓冲(标准输入输出一般用行缓冲) 不带缓冲(stderr)
8、exit和_Exit:_Exit立即进入内核,exit先执行清理处理,然后返回内核。
内核使程序执行的唯一方法是调用exec函数。
9、进程控制:
ID为0的进程通常是调度进程(交换进程),该进程是内核的一部分,它并不执行任何磁盘中的程序,因此叫作系统进程。ID为1的是init进程,在自举过程结束后由内核调用(所有孤儿进程的父进程)。由fork函数创建的新进程称为子进程,fork函数调用一次,返回两次。子进程返回的是0,父进程返回的是新建子进程的进程ID。子进程是父进程的副本,包括父进程的数据空间,堆栈等等。vfork()函数创建的子进程在父进程的空间中运行,子进程先运行,在他调用exec()或者exit()后父进程才恢复运行。
如果子进程正常终止,父进程可以用wait或者waitpid获得子进程的退出状态。如果父进程在子进程之前终止,对于父进程已经终止的所有进程(孤儿进程),他们的父进程都改变为init进程。一个已经终止,但是其父进程尚未对其做善后处理(获取终止子进程的相关信息,释放他占有的资源)的进程是僵死进程。
10、每个线程都包含有表示执行环境所必须的信息,其中包括进程中标识线程的线程ID,一组寄存器值,栈,调度优先级和策略,信号屏蔽字,errno变量以及线程私有数据。一个进程中被线程共享的包括可执行程序的代码,程序的全局内存和堆内存,栈以及文件描述符。
5种基本的同步机制(互斥量、读写锁、条件变量、自旋锁以及屏障)互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,”自旋”一词就是因此而得名。
11、套接字网络编程
网络编程的一般步骤
对于TCP连接:
1.服务器端1)创建套接字create;2)绑定端口号bind;3)监听连接listen;4)接受连接请求accept,并返回新的套接字;5)用新返回的套接字recv/send;6)关闭套接字。
2.客户端1)创建套接字create; 2)发起建立连接请求connect; 3)发送/接收数据send/recv;4)关闭套接字。
TCP总结:
Server端:create – bind – listen– accept– recv/send– close
Client端:create——- conncet——send/recv——close.
对于UDP连接:
1.服务器端:1)创建套接字create;2)绑定端口号bind;3)接收/发送消息recvfrom/sendto;4)关闭套接字。
2.客户端:1)创建套接字create;2)发送/接收消息sendto/recvfrom;3)关闭套接字.
UDP总结:
Server端:create—-bind —-recvfrom/sendto—-close
Client端:create—- sendto/recvfrom—-close.

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页