这一章主要知识点包括:程序启动与终止,进程终止exit与_axit,atexit函数。存储空间布局,深层嵌套出错跳出函数,资源查询与更改函数等内容。1.首先从内核传递命令行参数和环境变量值给c启动例程,然后c启动例程调用main函数,main调用其他函数。终止时,可以使用_exit()函数或者_Exit()函数,直接调用内核结束。也可以调用exit()函数,先进行清理处理。(调用各终止处理程序,标准I/O清理程序),然后再进入内核。2.exit函数先调...
目录1、主机到网络层协议:以太网协议2、IP协议3、网际控制报文协议(ICMP)4、传输控制协议(TCP)5、用户数据报文协议(UDP)6、地址解析协议ARP 联网的各个终端之间能否进行交互的软件基础是网络协议栈,目前主流的网络协议栈是TCP/IP协议栈。1、主机到网络层协议:以太网协议主机到网络层主要为IP协议和ARP协议提供服务、发送和接收网络数据报。本层中由于要实现跨网和跨设备的互通,有很多的实现方式,这里我们只关注以太网的...
unix环境高级编程的术语很多,概念内容,也很多,不过学习概念性质、标准规则类的东西,想必都是这样吧——需要进行拓展的内容很多。Linux程序设计,图文并茂,代码量够足,看起来,感觉难度还可以。linux程序设计这部书,是我第一部接触到的,因为想研究纯后端的东西,所以上面的不少图形界面相关的内容,我都是跳着看——感觉快要放弃这本书了,不过对unix体系,Linux的设计了解了很多东西,也只能是了解的底部,深入的话,需要时...
套接字接口(socket interface)是一组函数,它们和Unix I/O函数结合起来,用以创建网络应用。大多数现代系统上都实现套接字接口,包括所有的Unix变种、Windows和Macintosh。1.套接字的基本结构struct sockaddr这个结构用来存储套接字地址。数据定义:1struct sockaddr
2{
3 unsigned short sa_family; /* address族, AF_xxx */4char sa_data[14]; /* 14 bytes的协议地址 */56 };sa_family 一般来说,都是“AFINET”。...
概述有很多方法来获取和设置影响套接口的选项:getsockopt和setsockopt函数fcntl函数ioctl函数getsockopt和setsockopt函数这两个函数仅用于套接口。#include <sys/socket.h>
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname, constvoid *optval, socklen_t *optlen);
返回值:0——成功,-1——出错其中,sockfd必须指向一个打开的套接...
#include <time.h>
#include "../lib/unpsunyj.h"// Daytime server that prints client IP address and portint main(int argc, char **argv)
{int listenfd;int connfd;socklen_t len;struct sockaddr_in servaddr;struct sockaddr_in cliaddr; // 它将存放客户的协议地址char buff[MAXLINE];time_t ticks;// listenfd = Socket(AF_INET, SOCK_STREAM,...
本文内容大部分摘自《UNIX环境高级编程》,附有部分个人心得。1、unix体系结构从严格意义上来说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kernel),因为它相对较小,而且位于环境核心。如图显示unix体系结构。内核接口被称为系统调用(system call)。公用函数库构建在系统调用接口之上,应用程序既可食用公用函数库,也可以使用系统调用。shell是一个特殊的应用程序,...
地址格式转换函数:它们在ASCII字符串(人们比较喜欢用的格式)与网络字节序的二进制值(此值存于套接口地址结构中)间转换地址。1、inet_aton、inet_addr、inet_ntoainet_aton、inet_addr和inet_ntoa在点分十进制数串(例如,”206.168.112.96“)与它的32位网络字节序二进制值间转换IPv4地址。#include <arpa/inet.h>int inet_aton(constchar *strptr, struct in_addr *addrptr);
返回:1——串有效,0——串有错int_addr_t inet...
1.行控制函数下列4个函数提供了终端设备的行控制能力,其中,参数filedes引用一个终端设备,否则出错返回,errno设置为ENOTTY。#include<termios.h>
int tcdrain(int filedes);
int tcflow(int filedes, int action);
int tcflush(int filedes, int queue);
int tcsendbreak(int fledes, int duration);
//四个函数返回值:若成功则返回0,出错则返回-1.tcdrain函数等待所有输出都被发送。tcflow用于对输入和输出流控制进行控制。a...
不要问我基础,我用了近6年的Linux系统,最早的版本可以追溯到Ubuntu 8.04,常用的命令 VIM基本上是没压力,遇到问题google 配置环境变量 网络环境也不在话下,C语法基本熟练,过去一年,我自学过 数据结构 算法 CSAPP等课程,开坑Unix环境编程压力不大,开坑的原因主要是为了了解系统底层编程,更接系统实现的原理,预计时间2-3个月,Unix网络编程留明年开坑算了,估计Spring MVC等web后端框架又得推一推了,说实话,目前我真的不...
在ubuntu的/usr/include中添加apue.h和error.c文件 apue.h文件中添加下面代码/** Our own header, to be included before all standard system headers.*/
#ifndef _APUE_H
#define _APUE_H#define _POSIX_C_SOURCE 200809L#if defined(SOLARIS) /* Solaris 10 */
#define _XOPEN_SOURCE 600
#else#define _XOPEN_SOURCE 700
#endif#include <sys/types.h> /* some systems still require this */
#include <s...
假设有个python脚本script.py,不管哪种Unix平台,都可以在命令行上通过解释器执行:
$ python script.py
Unix平台还可以在不明确指定python解释器的情况下,自动执行python解释器,这需要在python脚本的第一行添加如下shell魔术字符串:
#!/usr/bin/python
在#!之后写上python解释器的完整路径,通常在/usr/bin或/usr/local/bin目录下。还有一种方法是使用env这个命令,位于/bin或/usr/bin中,它会帮你在系统搜索路径中找到python...
进程间通信(IPC)是指能在两个进程间进行数据交换的机制。现代OS都对进程有保护机制,因此两个进程不能直接交换数据,必须通过一定机制来完成。 IPC的机制的作用: (1)一个软件也能更容易跟第三方软件或内核进行配合的集成,或移植.如管道,在shell 下执行 ps –aux | grep bash。 (2)简化软件结构, 可以把一个软件划分多个进程或线程,通过IPC,集成在一起工作.如消息队列。 (3)让操作系统各个模块交换数据,包括内核...
环境搭建 在尝试UNP书上的样例时,会由于找不到"unp.h"等问题无法编译成功。因此在学习之前须要先搭建好编译环境。 步骤 <1>下载 UNIX网络编程源码unpv13e.tar.gz下载链接 http://download.csdn.net/detail/ymsdu2004/4906181 <2>解压 进入该文件夹后运行./configure 再进入lib文件夹下 cd lib 运行 make此时会在上层文件夹(就是刚才有configure那个文件夹)生成libunp.a文件 <3>复制libunp.a到 /usr/lib下 (以后gcc编...
如何才能read多个描述符呢,有下面这些方法。a.使用多个进程,每个进程执行阻塞read,但是这也产生了问题,操作什么时候停止?如果子进程接收到文件结束符,那么子进程终止,然后父进程接收到SIGCHLD信号,但是,若父进程终止,那么父进程应该通知子进程停止,为此可以使用一个信号(例如SIGUSR1),但这是程序变得更加复杂。b.使用多线程,这避免了终止的复杂性,但是要求处理线程之间的同步同样是程序复杂。c.使用非阻塞IO。将多...