基于Linux系统调用使用php实现一个在线编译运行C语言程序的系统

C语言发展史和概述-Linux运行C方法 第二代计算机语言:汇编语言,计算机不能直接识别的,优点:利于程序员编写开发,缺点:相对于机器语言的运行效率偏低,汇编语言是面向机器的,不同计算机会有不同的汇编语言,程序不易移植。预处理:在编译之前,预处理器会处理源代码文件,主要进行一些文本上的处理,包括去掉多余的空格和注释,处理预处理指令(后面会学到),生成经过处理的源代码文件,通常带有。第三代计算机语言:高级语言,计算不能直接识别的,优点:更利于程序员编写开发,缺点:相对于汇编语言的运行效率更低,学习难度降低了,编程效率提高。 阅读详情

     前段时间给学校做一个在线练习C语言程序和C语言考试的系统,服务器架构是LAMP的。因为其他的都没什么好多的,要实现在线编译只要exec()函数直接调用gcc进行编译就行了,

    这里解释一下命令:$filename是你的C语言源程序的地址,-o指定生成可执行文件名,2>compile_result.txt是将编译结果输出到compile_result.txt文件里面去(gcc的编译结果是输出到标准错误2的而不是标准输出1)分号是本语句结束,下一个语句是编码转换的命令,因为我要返回的是gb2312编码的字符,所以就将之前的编译结果文件转换成GB2312编码放到compile_res.txt里面去了。这里实现其实很多余,因为你完全可以就enconv -L zh_CN -x UTF-8 filename直接搞定,但是蛋疼的是服务器居然没有这个工具。没办法之下才用的iconv。如果客户要的就是UTF-8编码的话,那直接 2>&1就OK了,都不用临时文件咯~

    接下来是要在客户端上运行我们的C程序,并且将程序的输出输出到浏览器上。(并且能够读入用户端在浏览器输入的输入)这才是我们的重头戏!
首先,我们的实现还是基于临时文件和系统调用的基础之上实现的。不错如果要把用户的输入给弄到程序里面去的话,仅仅这样是不行的,下面我来说下我的实现方法:

主要的代码就是这样,这里的run_me程序是一个用C语言写的,将用户程序作为一个子进程运行,并且将用户程序的标准输入关闭,通过管道把input.txt的内容输入到用户程序中。(这里需要写过Linux下的进程最后输出运行结果的操作。
run_me的源代码如下:

 

如果熟悉在Linux下操作的朋友门一定觉得我上面的操作有点多余,直接就运行./prog_name < input.txt不就完了么?呵呵,是这样的,但是你要想到,如果用户是一个死循环程序,那么,你的服务器估计活不了太长的时间,如果只在系统层面limit对系统做限制,又不能保证大量用户同时使用这个系统。所以我才自己手动实现了一个重定向操作,并且加入了只让用户程序执行10毫秒的元素,这样就解决问题了~呵呵,如果有更好的方法希望大家推荐一下。也欢迎大家指出我的错误和问题。有什么不明白的地方也可以说出来大家讨论讨论~~

用PHP实现通过Web执行C/C++程序 如果你对Unix/linux有所了解的话,你应该知道他们大都自带了C和C++的编译器,分别是GCC和G++。Unix在程序安装及Make等许多地方使用到了这些编译器。利用一些控制台命令,C++和php, 我将向你介绍怎样生成一个完整的C++程序例子,他可以在用PHP程序来执行,并能获得相应的输出结果。我将先生成C++程序代码,并编译它,谈后讨论我们将如果通过使用PHP的函数passthru来执行这 阅读详情

相关推荐

php调用c语言编写的so动态库

PHP除了使用扩展库的方式调用c函数,还可以通过socket通信的方式。这里介绍前者。 第一步: 环境搭建 1. 先看本机是否已经安装了较低版本的php    #find /usr -name "php"    或者rpm -aq | grep php    如果存在,就使用rpm命令等方式卸掉 2. php源码安装,configure的参数如下 #./configure  --p

缘起宇轩阁 1万+

Linux开发——C语言调用外部程序(如lua,python,php,java...)方法(CGI)

目录 CGI定义 CGI功能 CGI编程 GET方法: POST方法 实战 get方法服务端代码 get方法外部程序(c语言)例子 post方法服务器端程序 post方法外部程序(c语言)例子 CGI定义 是用于WEB服务器和外部应用之间信息交换的标准接口。物理上是一段程序。 CGI功能 简单功能:计数器、生成包含日期、天气等的页面 中等难度的功能:图象映象、...

qq_25490573的博客 2880

我每天如何使用 ChatGPT

我偶尔会用这个功能作为开始。我本人非常喜欢阅读,让 ChatGPT 来概括所有文章,感觉就像身处于但丁描述的地狱的某个层次那样痛苦。然而,有时一些文章实在是太啰嗦、无聊,或者写得让人不愉快(比如一个无趣记者对一个让人讨厌的人进行的漫无焦点的采访)。我需要获取这些文章中的一些信息,以便保持信息的更新和了解。在晚期资本主义的广告经济下,很多文章只在一个段落里提供新信息,其余都是无聊的填充内容,只是为了展示糟糕的广告,这实在是对人们的时间和生命的一种浪费。我有几次利用 ChatGPT 来。

KevinDai007的博客 3784

php调用c 的三种方式,php调用c-c++的一种方式

php调用c/c++有很多方式,最常用的是通过tcp或者http去调用,通过发送请求去调用c/c++编写的cgi/fastcgi来实现,另外php还有一种直接执行外部应用程序的方式,这种方式会影响到系统安全,容易被攻击者利用,所以使用的时候要谨慎处理好用户输入php执行外部二进制命令的函数有好几个,比如exec和passthru,并且passthru函数能执行命令并且可以返回外部命令的输出,所以本...

weixin_42492543的博客 1162

谈谈SAP顾问的几个发展趋势

大家新年好,今天想聊一下对SAP顾问发展趋势的一些个人见解。过去10多年得益于我国的经济发展,外资不断加大在中国的投资和中国企业的发展,SAP顾问行业得到了很大的发展和壮大。那么未来几年SAP顾问的职业发展到底怎么样呢?

syounger的专栏 2514

C# WPF多页面间的数据共享(经典)

实现页面间的数据共享有很多方法,比如:①事件的发布订阅 ②委托③ioc容器④静态类等,这节主要通过静态的集合实现数据的添加和获取。

sf315418的博客 639

php gcc编译c语言,GCC程序编译

简介Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作之一。gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%~30%。GCC编译器能将C、C++语言源程序、汇编程序编译、链接成可执行文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。使用G...

weixin_36269709的博客 361

WRF后处理:python cartopy绘制土地利用/土地分类图//python绘制WRF下垫面类型(以北极为例)

下垫面类型对于WRF的地表过程十分重要,而在我们研究WRF的地表过程之前,需要对输入的土地利用类型进行一些绘制,以便后续的修改。LU_MODIS21函数定义了绘制的土地类型、标签与对应色标,我们使用时,直接引用LU_MODIS21()即可返回。其实很简单,只要将你拥有的土地类型数据提取出来,将原本函数中的labels和C切片,重新定义色标再绘制即可。在这里,我将以北极地区为例,绘制北极地区的WRF下垫面数据,我使用的MODIS21这类。

weixin_43750300的博客 3859

php 运行c语言,echo c语言运行

对 makefile 中 .DELETE_ON_ERRORS 的学习体会上例子SHELL=bash.DELETE_ON_ERRORS:LIBS=foo.gaoall: $(LIBS)@echo finalfoo.gao:@echo $@touch $@./me.o其中,me.o 程序是由C语言编译而成。其...文章嗯哼99252017-12-13966浏览量批处理bat文件的写作教程及实例怎么写批...

weixin_36428079的博客 444

手把手教你玩转服务器芯片架构​专栏--​​3.5 实战案例:用SystemC搭建一个多核服务器芯片的NoC模型(含流量分配与延迟仿真)​

通过SystemC搭建多核NoC模型,可深入验证流量分配策略与延迟特性。实际工程中需结合FPGA原型验证(如Xilinx Alveo)进行时序收敛分析,并通过参数化设计适配不同服务器芯片需求。

MHD0815的博客 3047

【知识图谱】neo4j安装与配置_社区版_2025(附完整安装软件包)

(经历过各种版本NEO4J,遇见杂七杂八的各种问题,也看过非常多很好的教程,特此来分享一下,为大家排排坑。

知识靠谱的博客 2万+

怎么把php代码转成c代码,怎么php代码转化为C#代码(5)

当前位置:我的异常网» C#»怎么php代码转化为C#代码怎么php代码转化为C#代码(5)www.myexceptions.net网友分享于:2013-10-19浏览:76次{returnEncrypt(Text,"密钥");}//////加密数据////////////publicstaticstringEncrypt(stringText,strings...

weixin_39876856的博客 518

手把手教你学simulink(41.4)--逆变器电场景示例:基于Simulink的主从控制的多逆变器协同控制(Multi-Inverter Coordinated Control)

需求分析在现代电力系统中,分布式发电和储能系统的广泛应用使得多个逆变器并联运行成为常见的应用场景。为了确保多个逆变器之间的协同工作,实现系统的稳定性和高效性,通常采用主从控制(Master-Slave Control)策略。主从控制通过一个主控制器(Master)来协调多个从控制器(Slave),确保所有逆变器的输出电压、频率和功率分配符合预期目标。本项目将基于Simulink平台,开发一个多逆变器协同控制系统,采用主从控制策略,实现对多个逆变器的精确控制和优化。

MHD0815的博客 306

在线编译

地址:http://ideone.com/

weixin_34235371的博客 111

微信小程序逆向实战:从HTTPS抓包到API接口全解构

方案原理优点缺点方案一:使用低版本微信+系统代理微信7.0以下版本未强制不走代理操作简单容易被封号,无法使用新版小程序方案二:Hook SSL层(Xposed/Frida)动态Hook Java的TrustManager或系统的SSLContext,绕过证书校验灵活可控需要Root/越狱,技术门槛高方案三:VPN转发抓包(PacketCapture)利用Android VPNService将所有流量转发到本地代理无需Root,兼容性好部分机型存在性能问题。

2201_76125261的博客 267

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

vss2010c语言怎么运行,在Linux下使用gcc运行C语言程序

Linux下使用最广泛的C/C++编译器是GCC,大多数的Linux发行版本都默认安装,不管是开发人员还是初学者,一般都将GCC作为Linux下首选的编译工具。本教程毫不犹豫地使用GCC来编译C程序。保存文件后退出,打开终端并 cd 到当前目录,输入下面的命令:gcc test.c -o test可以直接将C代码编译链接为可执行文件。可以看到在当前目录下多出一个文件 test,这就是可执行文件。不...

weixin_39690097的博客 313

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Linux学习】基础IO——系统调用 | 文件描述符fd | 重定向

介绍了基础IO中,文件操作系统调用的运用,文件描述符fd的本质,重定向的原理,包括输出重定向,输入重定向和追加重定向,以及对Linux下一切皆文件的认识。

weixin_63726869的博客 2463

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

系统调用exec_Exec系统调用C和PHP教程的示例

系统调用execexec() function is a function used to create and run processes in operating systems Linux, Windows and MacOS. exec() function has different useful variants like execve() , execl(), execlp() , ...

cunjiu9486的博客 527

Linux中用Eclipse来开发C语言程序,交叉编译ARM嵌入式C语言

一、Eclipse简介        Eclipse是著名的跨平台的集成开发环境(IDE),最初是由IBM公司开发的替代商业软件Visual Age For Jave的下一代开发环境。2001年,IBM将Eclipse贡献给开源社区,现在由Eclipse基金会管理。2003年Eclipse 3.0选择OSGi服务平台规范为运行时架构。 2007年6月,稳定版3.3发布。2008年6月

我的brian 5288

php 执行 c程序 linux,如何在Linux上编译和运行C和C++程序

C是一种用于开发系统软件的强大编程语言。本篇文章将介绍关于通过命令行在Linux系统中运行C和C ++程序。在本篇文章中,我们使用GCC(GNU Compiler Collection)的'gcc'和'g ++'命令来编译C / C ++程序。gcc是GCC中的GNU C编译器。g ++是GCC中的GNU C ++编译器。安装开发工具要运行C程序,必须在Linux系统上安装了开发工具包。运行以下命...

weixin_39611308的博客 87

php 执行 c程序 linux,linux如何运行c程序命令

linux运行c程序命令的方法:首先打开kali linux的终端,用vim工具打开文件并编写代码;然后输入【gcc test.cgcc】进行编译;最后再运行【test.out】在终端中输入【./test.out】。本教程操作环境:linux7.3系统,DELL G3电脑。linux运行c程序命令的方法:1、打开kali linux的终端。创建一个文件并命名为test.c。在终端输入:touch ...

weixin_30990711的博客 171

c语言代码 linux 关机_linux下c语言关机程序

linux下c语言关机程序/* Offtimer.c.For auto halt. */#include #include #include #define DELAY 60/* Time of sleeping */int main(){time_t now;struct tm *p;while(1){now = time(NULL);sleep(DELAY);/* To reduce cpu ...

weixin_39830688的博客 1210

(二)C语言开发工具

本篇介绍C语言开发工具,包括Windos下、linux下以及在线编译环境。

大学僧成长纪的博客 7437

【全网最强】最通俗易懂的C语言开发环境搭建教程,分分钟教你如何在Windows中运行第一个Hello World程序

作者:极客小俊 一个把逻辑思维转变为代码的技术博主 首先了解一下什么是编译器? 概述 编译器,可以简单地将它理解为一种翻译器, 就类似于专门的翻译一样, 要知道,计算机只认识二进制也就是 0 和 1 组成的代码指令 而我们平常所编写和开发的的 C 、C++、java、php、Go、python等等代码计算机本身是根本无法识别的,只有将这些程序代码中的每条语句翻译成对应的二进制指令,计算机才能执行, 这就是编译器的核心作用! 什么是GCC? GCC 全称 GNU Compiler Collectio.

极客小俊 5437

Linux系统编程:用PHP执行Root命令

在玩C以前玩过一段时间的PHP, 哪个时候需要用PHP 来运行root命令,一直未果,直到有一天搜索到了super这个插件。 随着玩C的日子多了,发现可以用C语言来包裹 要运行的外部命令。实验了一下,成功了。不需要任何外部工具就可以实现用PHP 执行root命令。我下面就把方法发布给大家,有需求用php来运行root命令的朋友可以不用发愁了。 平台:Linux 实验命令iptables

phphot 2253

linux编译安装rabbitmq-c & 编译PHP扩展amqp

AMQP——高级消息队列协议,目前比较有名气的实现大概就是大名鼎鼎的RabbitMQ了。 约定: 源码目录: /mnt/src/ 安装目录:/usr/local/ php扩展源码:/mnt/src/phpext/ phpize地址:/usr/local/php/bin/phpize phpconfig地址:/usr/local/php/bin/php-config php.ini地址

aggrelxf的专栏 2477
上一篇: Ubuntu 下安装SVN图形化工具rabbitvcs
下一篇: imagemagick用法
鱼塘鱼汤
博客等级 码龄17年 101粉丝 43原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值