当前位置: 首页 > news >正文

能自己在家做网站吗创建网站需要多少资金

能自己在家做网站吗,创建网站需要多少资金,网络营销策划书的结构及技巧,企业建设网站有用么目录 前言 运行功能开发分析 获取子进程运行信息 程序运行资源限制 运行功能开发代码 前言 上篇文章我们对客户端服务器传来的临时文件进行编译,这篇文章主要对编译成功的代码在我们的服务器运行这块功能的开发。 运行功能开发分析 在运行功能开发之前我们默…

目录

前言

运行功能开发分析

获取子进程运行信息

程序运行资源限制

运行功能开发代码


前言

上篇文章我们对客户端服务器传来的临时文件进行编译,这篇文章主要对编译成功的代码在我们的服务器运行这块功能的开发。

运行功能开发分析

在运行功能开发之前我们默认已经形成了可执行程序;对于该运行程序在我们的服务其中也是一个指令程序,因此我们也要在该程序中创建子进程进行程序替换执行该可执行程序。

程序运行无非就是三种结果

  1. 代码跑完,结果正确
  2. 代码跑完,结果不正确
  3. 代码没跑完,发生异常了

这三种情况我们不需要考虑结果的正确与否,因为代码的运行结果的正确与否是有我们题目的测试用例来判断的,我们只考虑能否正确运行完毕即可。

运行代码我们就要考虑下面几个问题

  • 运行的可执行程序的文件名
  • 一个程序在启动的时候会默认打开三个流:标准输入、标准输出、标准错误
  1. 对于标准输入:也就是平时运行程序输入的测试用例,这个我们不处理;因此题目的测试用例是题目提供的,我们可以重定向从文件中读取数据,而不是从键盘中读取;
  2. 对于标准输出:也就是运行完成输出的结果是什么,这个需要和我们题目测试用例的答案相比较;因此也需要重定向到一个临时文件中
  3. 对于标准错误:这是我们后端服务器运行是的错误信息,不提供给用户,因此也需要重定向到一个临时文件中

获取子进程运行信息

上面提到我们只考虑可执行程序运行异常的情况,可执行程序的运行是通过我们的子进程进程替换,我们可以通过等待子进程获取子进程的退出信息;

程序运行资源限制

一些在在线OJ平台会限制运行时间和内存,在Linux中我我们也可以通过系统调用来设置这个小模块

int setrlimit(int resource, const struct rlimit *rlim);

返回值

  • 如果调用成功,setrlimit() 返回 0。
  • 如果调用失败,返回 -1,并设置 errno 变量来指示错误类型。

参数

  • resource:指定要设置的资源类型,它是一个整数常量,代表了不同的资源,比如 CPU 时间、堆栈大小、文件描述符数量等。这些常量通常以 RLIMIT_ 开头,比如 RLIMIT_CPURLIMIT_STACKRLIMIT_NOFILE 等。可以在系统的 <sys/resource.h> 头文件中找到定义。

  • rlim:是一个指向 struct rlimit 结构的指针,用于指定相应资源的软限制和硬限制。struct rlimit 结构包含两个字段:

    • rlim_cur:软限制,指定了资源的软限制值。软限制是进程在不需要特权的情况下能够修改的资源限制。例如,一个进程的最大打开文件数。
    • rlim_max:硬限制,指定了资源的硬限制值。硬限制是由系统管理员设置的最大资源限制。如果进程试图超过硬限制,系统会阻止这种行为,除非进程有特权。

一般我们只会限制运行时间和空间大小, 这两个参数也是由我们的题目提供。

运行功能开发代码

// 提供运行服务
#pragma once
#include <iostream>
#include <unistd.h>
#include <string>
#include "../comm/Log.hpp"
#include "../comm/util.hpp"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <wait.h>
#include<sys/time.h>
#include<sys/resource.h>
using namespace std;
namespace ns_runner
{using namespace ns_util;using namespace ns_log;class Runner{public:Runner(){}~Runner(){}public://设置进程资源大小的接口static void SetProcLimit(int _cpu_limit,int _mem_limit){//设置cpu时长struct rlimit cpu_rlimit;cpu_rlimit.rlim_max=RLIM_INFINITY;cpu_rlimit.rlim_cur = _cpu_limit;setrlimit(RLIMIT_CPU,&cpu_rlimit);//设置内存大小struct rlimit mem_rlimit;mem_rlimit.rlim_max=RLIM_INFINITY;mem_rlimit.rlim_cur=_mem_limit*1024;//转化为kbsetrlimit(RLIMIT_AS,&mem_rlimit);}// 指明文件名即可, 不需要代理路径 ,不需要带后缀// 返回值int;// 返回值 > 0: 程序异常了,退出时收到了信号,返回值就是对应的信号编号// 返回值 == 0: 正常运行完毕的,结果保存到了对应的临时文件中// 返回值 < 0: 内部错误//运行时间,和内存限制是由出题人决定的//第二个参数static int Run(const string &file_name,int cpu_limit,int mem_limit){// 程序运行三种结果// 1.代码跑完,结果正确// 2.代码匏安,结果不正确// 3.代码没跑完,异常了// Run不需要考虑,结果正确与否// 结果正确与否,是由我们的正确用例决定的// 我们只考虑是否正确运行完毕//// 我们必须知道可执行程序是谁// 一个程序在默认启动的时候// 标准输入:不处理(不考虑用户自测情况)//只可以使用我们提供的测试用例// 标准输出:程序运行完成输出结果是什么// 标准错误:运行时错误信息// 写入文件// 获得可执行程序的文件名std::string _execute = PathUtil::Exe(file_name);std::string _stdin = PathUtil::Stdin(file_name);std::string _stdout = PathUtil::Stdout(file_name);std::string _stderr = PathUtil::Stderr(file_name);umask(0);int _stdin_fd = open(_stdin.c_str(), O_CREAT | O_RDONLY, 0644);int _stdout_fd = open(_stdout.c_str(), O_CREAT | O_WRONLY, 0644);int _stderr_fd = open(_stderr.c_str(), O_CREAT | O_WRONLY, 0644);if (_stdin_fd < 0 || _stdout_fd < 0 || _stderr_fd < 0){LOG(ERROR)<<"运行时打开标准文件失败"<<"\n";return -1; // 打开文件失败,运行信息获取失败}pid_t pid = fork();if (pid < 0){close(_stdin_fd);close(_stdout_fd);close(_stderr_fd);LOG(ERROR)<<"运行时创建子进程失败"<<"\n";return -2; // 代表创建子进程失败}else if (pid == 0){// 子进程dup2(_stdin_fd, 0);dup2(_stdout_fd, 1);dup2(_stderr_fd, 2);SetProcLimit(cpu_limit,mem_limit);execl(_execute.c_str() /*我要执行谁*/, _execute.c_str() /*我想在命令行上如何执行该程序*/, nullptr);exit(1);}else{// 父进程close(_stdin_fd);close(_stdout_fd);close(_stderr_fd);int status = 0;waitpid(pid, &status, 0); // 程序运行异常,一定是因为收到了信号LOG(INFO)<<"运行完毕,info:"<<(status&0x7F)<<"\n";return status & 0x7F;}}};
}

今天对项目运行功能开发的分享到这就结束了,希望大家读完后有很大的收获,也可以在评论区点评文章中的内容和分享自己的看法;个人主页还有很多精彩的内容。您三连的支持就是我前进的动力,感谢大家的支持!!! 

http://www.ds6.com.cn/news/18411.html

相关文章:

  • 建设工程j教育网站seo排名赚挂机
  • 外贸b2c网站建设公司淄博网站seo
  • 网站流程图百度云盘搜索
  • 网站开发 上海安卓手机优化
  • 南京市住房城乡建设委官方网站产品宣传方案
  • 网站开发一定要学java吗产品线上推广方案
  • 怎样用wordpress做网站百度怎么推广产品
  • 烟台做网站的价格科学新概念seo外链平台
  • 汽车之家网页版入口seo百度首页排名业务
  • 自己买域名可以做网站吗北京网站seo优化推广
  • 大连网站开发网站seo分析
  • 哈尔滨网站推广百度竞价推广投放
  • 网站开发实现的功能百度 seo 工具
  • 阿里云服务器做电影网站百度大搜是什么
  • 动态网站开发步骤网站改版seo建议
  • 网站怎么做搜索功能网络推广公司官网
  • 建设银行积分兑换商城网站线上推广渠道有哪些方式
  • 旅行网站建设的规划书企业推广网络营销外包服务
  • 阿里云个人网站备案湖南seo排名
  • 海沧区建设局网站 破路申请徐州seo推广
  • 重庆市建设工程信息网查证件seo sem是什么职位
  • 泉州哪里做网站开发百度搜索引擎属于什么引擎
  • 南充做网站的公司怎么在百度上发布信息广告
  • 厦门网站建设h5北京互联网公司排名
  • 天猫店铺装修做特效的网站seo站长论坛
  • 在小说网站做责编百度搜索数据统计
  • 广西响应式网站平台软文营销文案
  • 网站上写个招贤纳士怎么做抖音自动推广引流app
  • 个人网站推广方案google搜索优化
  • 网站秒收录seo关键词排名优化软件怎么选