利用dup函数实现基本的CGI服务器

2023-11-18

复制文件描述符的dup和dup2函数:

#include<unistd.h>

int dup(int oldfd);

int dup2(int oldfd,int newfd);

标准输入文件的文件描述符: 0

标准输出文件的文件描述符:1

标准错误输出的文件描述符:2

dup函数创建一个文件描述符,该新文件描述符和原有文件描述符oldfd指向相同的文件、管道或者网络连接。并且dup返回的文件描述符总是系统当前可用的最小整数值。dup和dup2类似,不过它将返回第一个不小于newfd的整数值。dup和dup2系统调用失败时返回-1并设置errno。

comm.h

​

#ifndef COMM_H
#define COMM_H

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/ipc.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
#include<assert.h>
#include<unistd.h>
#include<iostream>
using namespace std;
const char *ip="127.0.0.1";
const int port = 10005;
#endif

​

server.c

#include "comm.h"
class server
{
  private:
     int sock;
  public:
   server();
   void create_socket();
};
server::server()
{
 int sock=0;
}
void server::create_socket()
{
 struct sockaddr_in server;
 bzero(&server,sizeof(server));
 server.sin_family = AF_INET;
 inet_pton(AF_INET,ip,&server.sin_addr);
 server.sin_port = htons(port);
 sock = socket(PF_INET,SOCK_STREAM,0);
 assert(sock > 0);
 int ret = bind(sock,(struct sockaddr*)&server,sizeof(server));
 assert(ret != -1);
 ret = listen(sock,5);
 assert(ret != -1);
 
 struct sockaddr_in client;
 bzero(&client,sizeof(client));
 socklen_t len = sizeof(client);
 int connfd = accept(sock,(struct sockaddr*)&client,&len);
 if(connfd < 0)
   printf("errno is:%d\n",errno);
 else 
  {
    close(STDOUT_FILENO);
    dup(connfd);
    printf("liuyifei,I love you!\n");
    close(connfd);
  }
 close(sock);
}

client.c

#include "comm.h"
class client{
private:
   int sock;
public:
   client();
   void create_client();
};
client::client()
{
 int sock = 0;
}
void client::create_client()
{
 struct sockaddr_in client;
 bzero(&client,sizeof(client));
 client.sin_family = AF_INET;
 inet_pton(AF_INET,ip,&client.sin_addr);
 client.sin_port = htons(port);
 sock = socket(PF_INET,SOCK_STREAM,0);
 assert(sock >= 0);
 
 if((connect(sock,(struct sockaddr*)&client,sizeof(client)) != -1))
 {
  char buf[30];
  printf("connect successful!\n");
  if(recv(sock,buf,sizeof(buf),0) > 0)
   cout<<buf<<endl;
  else printf("the errno:%d\n",errno);
 }
 else printf("the errno:%d\n",errno);
close(sock);
}
int main()
{  
  client CGI;
  CGI.create_client();
  return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用dup函数实现基本的CGI服务器 的相关文章

  • 关于C的预编译 宏定义 的一些使用[不断积累中]

    头文件 防止重复包含 根据 define 和条件编译 ifdef ifndef else endif 最经常的使用是 头文件 防止重复包含 但是 使用 pragma once 更好 现在 gcc cl exe 都支持 它不但代码更少 而且不
  • 点云分割介绍

    PCL之点云的分割 参考博客 https www yuque com huangzhongqing pcl kg7wvi peMqz https blog csdn net lizhengze1117 article details 890
  • 股权投资模型-CAPM模型和PEG模型(内附示例数据)

    一 CAPM模型 1 数据来源 示例数据附在分享文件中 2 数据年份 2000 2019年 3 数据指标 资本资产定价模型 Capital Asset Pricing Model 简称CAPM 是由美国学者威廉 夏普 William Sha
  • @JsonView的使用

    看到一个新的注解以前没有用过 记录一下使用方法 注意是 com fasterxml jackson annotation JsonView JsonView可以过滤pojo的属性 使Controller在返回json时候 pojo某些属性不
  • Spring MVC基本操作

    Spring MVC 一 Spring MVC概述 1 1 Spring MVC 简介 MVC是一种常见的用户界面设计模式 设计套路 其实现方案有很多 Struts2 SpringMVC等等 MVC Model 数据模型 View 视图 C
  • Delete `␍`eslint(prettier/prettier) Expected linebreaks to be ‘LF‘ but found ‘CRLF‘错误的解决方案

    Delete eslint prettier prettier Expected linebreaks to be LF but found CRLF 错误的解决方案 执行 git config global core autocrlf f
  • 蓝桥杯备赛:贪心

    例题1 最少砝码 问题描述 你有一架天平 现在你要设计一套砝码 使得利用这些砝码可以称出任意 小于等于 NN 的正整数重量 那么这套砝码最少需要包含多少个砝码 注意砝码可以放在天平两边 输入格式 输入包含一个正整数 N 输出格式 输出一个整
  • 【Java---数据结构】顺序表

    目录 一 线性表 二 顺序表 概念及结构 接口实现 打印顺序表 gt 遍历数组 在pos位置添加一个元素 插入 判断是否包含某个元素与查找某个元素对应的位置 获取pos位置的元素与给 pos 位置的元素设为 value 删除第一次出现的元素
  • 简单的小程序聊天对话窗口界面

    一个简单的微信小程序聊天对话窗口界面 包括发送文本功能 直接上代码 js代码 简单版 Page data content 当前登录者信息 login id 2023 user 大猪蹄子 avatar https img2 baidu com
  • 按钮 java_java如何创建并设置一个按钮

    java如何创建并设置一个按钮 AWT 抽象窗口工具包 是java提供用来建立和设置java的图形用户界面的基本工具 Swing 轻量级的图形界面组件 是以AWT平台为基础构建起来的新组件与AWT相比 Swing组件在实现时不包括任何依赖特
  • WebService 客户端获取别的服务器端传递xml或者json中文乱码

    最近在对接某行的网站后台WebService接口 对接过程中出现的乱码做下记录 使用WebService对接方式是 JAX WS 方式 开发工具 myeclipse 新建客户端 依次按照步骤 生成java文件 编写测试类 以上能与对方接口进
  • ZLMediaKit尝试解决GB28181(UDP方式)的视频花屏问题

    问题现象 视频出现大量花屏 无法观看 日志中出现大量的丢包输出 排查ZLMediaKit 的解决方案 https github com ZLMediaKit ZLMediaKit issues 1221 已尝试的方案 try1 服务器调优
  • 关于Form表单中action参数传值的问题

    form中get方法时action属性后面传递参数获取不到原因 浏览器会将表单数据封装为字符串 如controller message method search 然后直接附在表单的 action URL 之后 这两者之间用问号 进行分隔度
  • Spark大数据分析与实战笔记(第一章 Scala语言基础-3)

    文章目录 1 3 Scala的数据结构 1 3 1 数组 数组的遍历 数组转换 1 3 2 元组 创建元组 获取元组中的值 拉链操作 1 3 3 集合 List Set Map 1 3 Scala的数据结构 对于每一门编程语言来说 数组 A
  • Linux下使用system函数获取命令执行返回结果

    在Linux C语言中 需要获取设备挂载和空间容量信息 这时候最简单的方式就是使用命令工具进行查询 但是system函数调用之能返回进行执行的状态 不能返回执行的结果 所以这里自己实现system函数返回命令执行的结果 以获取设备挂载信息和
  • 第1周编程题-表示分数类的Fraction

    题目内容 设计一个表示分数的类Fraction 这个类用两个int类型的变量分别表示分子和分母 这个类的构造函数是 Fraction int a int b 构造一个a b的分数 这个类要提供以下的功能 double toDouble 将分
  • R语言数据拆分

    博主的话 大家好 这里是bio 先赞后看养成习惯 还没关注的小伙伴点点关注不迷路 今天是南方的小年 祝福大家小年快乐 目录 博主的话 前言 一 split 函数 二 subset 函数 总结 前言 今天继续学习R语言 我们之前已经介绍过了数
  • 用python对训练集和测试集进行特征规范化处理

    这里的规范化处理指对提取后的特征集进行处理 不是对原始的数据信号进行处理 包括归一化和标准化 规范化的原因 不同特征具有不同量级时会导致 a 数量级的差异将导致量级较大的特征占据主导地位 b 数量级的差异将导致迭代收敛速度减慢 c 依赖于样

随机推荐

  • 从ChatGPT出发:大模型与自然语言模型

    目录 引言 基石 故事的开始 Transformer 异姓兄弟 GPT Bert与GPT 2 GPT Bert GPT 2 大力出奇迹 GPT3 模型的进化 InstructGPT ChatGPT 代码库 Transformer GPT 2
  • 【Linux】进程篇---进程概念及原理

    目录 1 什么是进程 2 操作系统是如何管理进程的 3 进程标识符 PID 3 1查看进程标识符 3 2getpid 和getppid 4 进程当前状态 4 1进程状态粗分 4 2Linux下进程状态 4 2 1linux下进程状态概念 4
  • 【深度学习】端到端的“即插即用“卷积模块以替代传统Conv层

    文章参考 大盘点 十大即插即用的涨点神器 360doc com CompConv 一种用于高效特征学习的紧凑型卷积模块 知乎 zhihu com 紧凑型深度卷积神经网络在图像识别中的应用 ceaj org
  • 浪潮服务器通过DHCP获取地址进入IPMI,BMC管理后台的方法,可实现远程安装系统、温度运行状态监测、风扇转速调整、远程开关机、KVM控制台显示器等功能

    前言 这里主要介绍通过DHCP进入BMC管理后台的方法 在官方网站有介绍的地方会直接给链接 这里就不在赘述 配置网络 DHCP获取地址 这个方法适用于没有手动设置过BMC地址的情况 这里用到的DHCP工具是 深度远程启动管理器 深度远程启动
  • 面试准备:MySQL建立索引的原则

    文章目录 建立索引 1 和in可以乱序 2 最左前缀匹配原则 3 尽量选择区分度高的列作为索引 4 索引列不能参与计算 5 尽量的扩展索引 不要新建索引 6 为经常需要排序 分组和联合操作的字段建立索引 7 为常作为查询条件的字段建立索引
  • 【山河送书第十一期】:朋友圈大佬都去读研了,这份备考书单我码住了,考研书籍五本!!

    朋友圈大佬都去读研了 这份备考书单我码住了 数据结构与算法分析 计算机网络 自顶向下方法 现代操作系统 深入理解计算机系统 概率论基础教程 原书第10版 线性代数 原书第10版 线性代数及其应用 重磅推荐 参与方式 往期赠书回顾 八九月的朋
  • AlmaLinux 安装过程解析

    此文将对AlmaLinux操作系统安装过程进行解析 对于经常使用Linux系统的大佬 可能对此安装过程有些乏味 但鉴于目前为止 似乎没有一篇安装的过程解析 那不妨由笔者写下一篇吧 笔者软件安装环境 VMware VMware Worksta
  • 提升模型效果的途径

    模型效果不佳 可以考虑从以下几个方面进行改进 数据增广 1 基于图像处理的数据增广 几何变换 旋转 缩放 翻转 剪裁 平移 仿射变换 颜色空间变换 亮度 对比度 饱和度调整 颜色空间转行 色彩调整 添加噪声和滤波 注入高斯噪声 椒盐噪声 模
  • Python模糊控制库使用(基本操作与仿真结果3D显示)

    Python模糊控制库使用 模糊控制库安装 示例 定义模糊控制变量 模糊隶属函数 模糊规则 激活模糊控制器 3D可视化结果 完整代码 模糊控制库安装 模糊控制库github 链接 Github python pip安装 pip instal
  • 第三十九章、PyQt显示部件:OpenGL Widget部件功能简介及使用其显示图片

    专栏 Python基础教程目录 专栏 使用PyQt开发图形界面Python应用 专栏 PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一 概述 OpenGL Widget部件是一个OpenGL Open Graphics L
  • java反射机制 (属性,注解)(代码)

    博学谷IT学习技术支持 1案例的类 import com example demo3 fanshe MyAnnotation import lombok Data author zw Description 描述 create 2022 2
  • YOLOv8+BoT-SORT多目标跟踪(行人车辆计数与越界识别)

    课程链接 https edu csdn net course detail 38919 BoT SORT是发表于2022年的先进的多目标跟踪算法 它结合了运动和外观信息 相机运动补偿和更准确的卡尔曼滤波状态向量 并把这些改进集成到ByteT
  • vue的环境搭建2023,idea,vscode踩坑记录

    由于看了19 20年的几篇博客 导致搭建vue环境一部分环节出大问题 大家还是看官方文档吧 血泪教训 不说废话直接开始 1 nodejs下载 下载地址 https nodejs org zh cn 下载稳定版 安装过程我是一路next 就是
  • python之折半查找算法

    折半查找算法也叫二分查找算法 算法的细节我就不讲了 但是必须说一下二分查找是基于我们之前的数据是有序的 如果没有序该算法是没有意义的 个人觉得代码比较直观 所以我这里就直接上代码了 折半查找非递归算法 折半查找非递归算法 折半查找函数 参数
  • 实验二 势函数算法的迭代训练

    实验二 势函数算法的迭代训练 一 实验目的 通过本实验的学习 使学生了解或掌握模式识别中利用势函数思想设计非线性判别函数的方法 能够实现模式的分类 学会运用已学习的先导课程如数据结构和算法设计知识 选用合适的数据结构完成算法的设计和程序的实
  • Python获取文件名和文件类型

    def get file info path dir path file full name os path split path file name file type os path splitext file full name re
  • [搬家前]代码走查

    代码走查 就是一群人一起 对别人写的代码进行分析 在算法上 在具体实现上 提出改进的意见 以使得程序更加健壮 更加有效率 今天对我写的一个Java Mail程序进行走查 自我感觉写得是有点丑 但是基本功能还是实现得很好的 经过走查 我收获很
  • 基于SpringBoot的高校党务管理系统

    系列文章目录 基于PHP的旅游管理系统 基于SSM的毕业设计管理系统 基于SpringBoot的高校在线答疑管理系统 目录 系列文章目录 一 相关技术 二 系统功能 三 系统页面 1 管理员功能页面 2 学生功能页面 3 党组织功能页面 4
  • 2021年安装deepin20.3和windows双系统

    2021年安装deepin20 3和windows双系统 1 前言 如你所见deepin最近发布了它的社区版20 3 这次带来几个重要的更新 更强大的内核版本 Stable内核升级到5 15版本 增强对Intel 12代U和NTFS文件系统
  • 利用dup函数实现基本的CGI服务器

    复制文件描述符的dup和dup2函数 include