2018-2019-1 20165220 《信息安全系统设计基础》第八周学习总结

教材知识点总结

1.并发程序有三种方法

a.线程:线程是运行在单一进程上下文中的逻辑流,由内核进行调度

b.进程:每个逻辑流都是一个进程,由内核来调度和维护。

c..I/O多路复用:在这种形式中,应用程序在一个进程的上下文中显式地调度它们自己的逻辑流。逻辑流被模型化为状态机。因为程序是一个单独的进程,所以所有的流都共享同一个地址空间。

2.构造并发服务器的自然方法就是,在父进程中接受客户端连接请求,然后创建一个新的子进程来为每个新客户端提供服务。

3.因为父子进程中的已连接描述符都指向同一个文件表表项,所以父进程关闭它的已连接描述符的拷贝是至关重要的,而且由此引起的存储器泄露将最终消耗尽可用的存储器,使系统崩溃。

4.客户端-服务器编程模型

a.一个应用是由一个服务器进程和一个或多个客户端进程组成

b.服务器进程 -> 管理某种资源 -> 通过操作这种资源来为它的客户端提供某种服务

5.全球IP因特网

a.TCP/IP协议族

b.因特网的客户端和服务器混合使用套接字接口函数和UnixI/O函数进行通信

6.

每个网络应用都是基于客户端一服务器模型的。一个应用是由一个服务器进程和一个或者多个客户端进程组成。服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务。

客户端一服务器模型中的基本操作是事务,一个客户端-服务器由四步组成:

a.当一个客户端需要服务时,它向服务器发送一个请求,发起一个事务。

b.服务器收到请求后,解释它,并以适当的方式操作它的资源。

c.服务器给客户端发送一个响应,并等待下一个请求。

d.客户端收到响应并处理它。

7.

socket 函数

客户端和服务器使用 socket 函数来创建一个套接字描述符

connect 函数

客户端通过调用 connect 函数来建立和服务器的连接。

open_clientfd 函数

open_clientfd 函数和运行在主机 hostname 上的服务器建立一个连接,并在知名端口 port 上监听连接请求。它返回一个打开的套接宇描述符,该描述符准备好了,可以用 Unix I/O 函数做输入和输出。

** bind 函数**

bind、 listen 和 accept 被服务器用来和客户端建立连接。

加分项目——pwd的实现

首先通过man 命令了解了一下pwd的用法

相关代码

#include<stdio.h>  
#include<sys/stat.h>  
#include<dirent.h>  
#include<stdlib.h>  
#include<string.h>  
#include<sys/types.h>  
void printpath();  
char *inode_to_name(int);  
int getinode(char *);  
int main()  
{  
    printpath();  
    putchar('
');  
    return ;  
}  
void printpath()  
{  
    int inode,up_inode;  
    char *str;  
    inode = getinode(".");  
    up_inode = getinode("..");  
    chdir("..");  
    str = inode_to_name(inode);  
    if(inode == up_inode) {  
    //  printf("/%s",str);  
        return;  
    }  
    printpath();  
    printf("/%s",str);  
}  
int getinode(char *str)  
{  
    struct stat st;  
    if(stat(str,&st) == -1){  
        perror(str);  
        exit(-1);  
    }  
    return st.st_ino;  
}  
char *inode_to_name(int inode)  
{  
    char *str;  
    DIR *dirp;  
    struct dirent *dirt;  
    if((dirp = opendir(".")) == NULL){  
        perror(".");  
        exit(-1);  
    }  
    while((dirt = readdir(dirp)) != NULL)  
    {  
        if(dirt->d_ino == inode){  
            str = (char *)malloc(strlen(dirt->d_name)*sizeof(char));  
            strcpy(str,dirt->d_name);  
            return str;  
        }  
    }  
    perror(".");  
    exit(-1);  
}

运行结果:

总结:pwd命令的作用是查看当前所在的工作路径。

原文地址:https://www.cnblogs.com/brs6666/p/10017998.html