资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
注解:考试题型大体是:填空题、简答题、编程题填空题:一般就是写一个函数有什么作用或者给你作用写个函数名,还有就是例如显示多少行代码什么的,就是某些参数的作用,填空分值不大!简答题:下面整理的资料的蓝色字体一般是简答题!编程题:把大体框架写出来就好,记住下面整理的结构体(绿色字体) ,就是只写个结构体也有分数,同时要写代码,不要空白,要不老是不好给分数啊!其他整理的内容你们大体看一下,主要看看那个精简版的编程文档!考试不要带小抄,这次开监控器,严打!socket:sockaddr_in 的地址结构:struct sockaddr_in short sin_family; /* Address family */unsigned short sin_port; /* Port number */struct in_addr sin_addr; /* Internet address */unsigned char sin_zero8; /* Same size as struct sockaddr */;socket、bind、listen、accept、connect 、send、recv、close、setsockopt 等函数的参数意义。1、函数原型 int socket(int domain, int type, int protocol);第一个参数指定应用程序使用的 通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET;第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM、原始套接字SOCK_RAW(WinSock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部);第三个参数指定应用程序所使用的 通信协议。此参数可以指定单个协议系列中的不同传输协议。在Internet通讯域中,此参数一般取值为0,系统会根据套接字的类型决定应使用的传输层协议。2、int bind(int socket, const struct sockaddr *address,socklen_t address_len);参数说明:socket:是一个套接字。address:是一个sockaddr结构 指针,该结构中包含了要结合的地址和端口号。address_len:确定 address 缓冲区的长度。3、int listen(int lsn_fd, int backlog); backlog 是 侦听队列的长 度,在内核函数中,首先对 backlog 作检查,如果大于 128, 则强制使其等于 128。4、int accept(int s, struct sockaddr *addr, socklen_t *addrlen);参数 addr 是回传指针。存入的是接受的连接对端的地址信息。accept 返回一个新的套接字描述符 fd。5、int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);connect函数将使用参数sockfd 中的套接字连接到参数 serv_addr中指定的服务器。参数addrlen为serv_addr指向的内存空间大小。6、int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen);参数: sock:将要被设置或者获取选项的套接字。level:选项所在的协议层 。optname:需要 访问的 选项名。optval:对于 getsockopt(),指向返回选项值的缓冲。对于 setsockopt(),指向包含新选项值的缓冲。optlen:对 于 getsockopt(),作为入口参数时,选项值的最大长度。作为出口参数时,选项值的实际长度。对于 setsockopt(),现选项的长度。7、ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);send解析sockfd:指定发送端套接字描述符。buff: 存放要发送数据的缓冲区nbytes: 实际要发送的数据字节数flags: 一般设置为0recv函数sockfd: 接收端套接字描述符buff: 用来存放recv函数接收到的数据的缓冲区nbytes: 指明 buff的长度flags: 一般置为08、Closesocket 在linux中,就是close 。服务器、客户端之间使用 socket 进行文件传输的程序;signal & timer:sigaction、timeval、itimerval 结构;struct sigaction void (*sa_handler)(int);sigset_t sa_mask;int sa_flags;void (*sa_restorer)(void); struct timeval_time_t tv_sec;_suseconds_t tv_usec; struct itimervalstruct timeval it_interval;struct timeval it_value; signal 和 sigaction 函数的区别;(1) signal 函数每次设置具体的信号处理函数(非 SIG_IGN)只能生效一次,每次在进程响应处理信号时,随即将信号处理函数恢复为默认处理方式而 sigaction 函数设置后就一直有效,不会重置。(2)signal:在信号发生之后到信号处理程序中调用 signal 函数之间有一个时间窗口;在进程不希望某种信号发生时,它不能关闭该信号。sigaction:在信号处理程序被调用时,系统建立的新信号屏蔽字会自动包括正被递送的信号如何向自己和其他进程发送信号 SIGINT(kill、raise ) ;向进程发送指定信号 :#inlcude #include int kill(pid_t pid, int sig); 向自身发送指定信号: #include int raise(int sig); 信号集的清空、填充、判断成员等(sigemptysetsigfillsetsigaddsetsigismember) ;初始化信号集并清空 #include int sigemptyset(sigset_t *set); 初始化信号集并加入所有的信号 #include int sigfillset(sigset_t *set); 将指定信号加入到信号集中 #include int sigaddset(sigset_t *set, int signum); 查询某信号是否加入到了指定信号集中 #include int sigismember(const sigset_t *set, int signum); 建立定时器和查询定时器状态(alarm、setitimer、getitimer) ;设置定时器间隔时间 #include unsigned int alarm(unsigned int seconds); 返回值:之前定时器剩余的时间(秒)设置定时器 #include int setitimer(int which, const struct itimerval *new, struct itimerval *old); 返回值:设置成功返回 0,失败返回-1获取指定类型的定时器 #include int getitimer(int which, struct itimerval *value); 返回值:成功返回 0,失败返回-1可以建立哪几种定时器,返回的信号都是什么?#include Unsigned int sleep(unsigned ing secounds);返回值:剩余的时间(秒)memory:buddy 算法、slab 算法:buddy 算法: 是用来做内存管理的经典算法,目的是为了解决内存的外碎片。Buddy 算法把所有的空闲页面分为 10 个块组,每组中块的大小是 2 的幂次方个页面, 每一组中块的大小是相同的,且这同样大小的块形成一个链表。slab 算法 :能够用合适的方法使得对象前后两次被使用时,在同一块内存或同一类内存空间,且保留了基本的数据结构,就可以极大的提高效率每个进程拥有的内存空间分别有那几个部分组成(p163 页上):程序代码区、全局数据区(清零区) 、堆区、栈区、内核空间malloc、 free、mmap 和 munmap 的定义及用法;申请内存空间分配 #include void *malloc(size_t size); 建立内存映射#include #include void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); bzero、memset 和 strcpy 的作用和用法(给一个 buffer 赋值) ;两个进程通过 mmap 方法进行内存数据交换的例子( mmap1.c 和 mmap2.c) ;file:(exp/t.c)文件流函数(fopen、fclose、fseek、ftell、feof 、fread、fwrite)和文件函数(open、creat、close、read、write)的区别和使用方法;1,fread是带缓冲的,read 不带缓冲.2,fopen是标准c里定义的,open是POSIX 中定义的.3,fread可以读一个结构.read 在linux/unix中读二进制与普通文件没有区别.4,fopen不能指定要创建文件的权限.open可以指定权限.5,fopen返回指针,open返回文件描述符(整数).6,linux/unix中任何设备都是文件,都可以用open,read.如果文件的大小是8k。你如果用read/write,且只分配了 2k的缓存,则 要将此文件读出需要做4次系统调用来实际从磁盘上读出。如果你用fread/fwrite,则系统自动分配缓存,则读出此文件只要一次系统调用从磁盘上读出。也就是用read/write要 读4 次磁盘,而用fread/fwrite则只要读1次磁盘。效率比read/write要高 4倍。如果程序对内存有限制,则用read/write 比较好。都用fread 和fwrite, 它自动分配缓存,速度会很快 ,比自己来做要简单。如果要处理一些特殊的描述符,用read 和write,如套接口,管道之类的系统调用write的效率取决于你buf 的大小和你要写入的 总数量,如果buf太小,你进入内核空间的次数大增,效率就低下。而fwrite会替你做缓存,减少了实际出现的系统调用,所以效率比较高。如果只调用一次(可能吗?),这俩差不多,严格来说 write 要快一点点(因为实际上 fwrite 最后还是用了 write 做真正的写入文件系统工作),但是这其中的差别无所谓。如何建立无名管道和有名管道(pipe、mkfifo) ;创建无名管道#include int pipe (int filedes2);创建有名管道#include #include int mkifo(const char *pathname,mode_t mode);打开一个文件读出内容并且写入另一个文件的程序;两个进程使用有名和无名管道进行通信的程序;IPC:(实验二的要求)函数 shmget、 shmat、shmdt、shmctl 等函数的参数说明及使用;函数 msgg
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号