我想在linux下写一个c程序调用linux的可执行文件或者程序,怎么做

我想在linux下写一个c程序调用linux的可执行文件或者程序,怎么做,第1张

Linux C编程中,调用另一个可执行文件或调用命令用system函数最简单了,这个函数原理是在你编写的那个程序的内部启动另一个程序或命令,从而创建一个新进程,并等待这个进程执行完毕退出。如果正常执行,system函数将返回被执行程序或命令的退出码;如果无法运行这个程序或命令,将返回错误代码127;如果是其他错误,返回-1。这个函数的原型是:

#include <stdlibh>

int system(const char string);

参数string是将要执行的程序文件名或路径,如果是启动一个命令就是一个命令字符串。

还有一种执行外部程序的方法是exec系列函数,一般是在fork的子进程里面调用exec系列函数,那主进程里直接调用exec系列不行吗,为什么要fork再在子进程里调用呢?因为exec系列的函数(包括execl函数)是将当前进程替换成新进程,这里的当前进程就是你编写的程序,也就是说新进程启动后调用exec函数的进程就不存在了,所以exec系列函数调用之后的代码就不会再执行了。如果你不放在fork子进程里面,那你编写的程序的主进程在执行execl函数后就完全不存在了,所以exec系列函数的使用都是先fork然后在子进程里面调用。因为exec系列函数都要使用fork调用,所以我一般是用system函数。

WinCE 和 Linux 都是系统。这里你最好理解为不同的系统内核(确实如此,WinCE 主要还是系统核心部分,需要准备用户环境的,Linux 也要看他的外围应用程序的)。

ADs 是 arm 的开发环境,印象里有 WinCE 和 Linux 双开发环境,类似于一个直接就能用的开发环境。还包括模拟器、调试器什么的。

印象里是这样。

==============

ARM 开发,既可以用 WinCE ,也可以用 Linux 。

当然还有别的系统,比如 ucos (好象是这个名字)。

也可以自己写。

首先解释一下什么是Linux发行版(英文名称是Linux Distribution)。Linux实际上是一种开放源代码的 *** 作系统内核,通常我们说的Linux指的是基于Linux内核的 *** 作系统。Linux *** 作系统包括Linux内核和Linux用户态程序,Linux内核和Linux用户态程序都是开放源代码的,绝大多数软件代码遵循GPL协议,任何人拿到这些代码都可以对这些代码进行修改和分发。由于Linux上代码的高度自由,很多公司和组织都推出了自己的Linux *** 作系统,这些Linux *** 作系统我们就叫做Linux发行版。

各种不同的Linux发行版的共同点就是都使用了Linux内核,不同的Linux发行版的内核可能有一些小的修改。

Linux内核版本与linux发行版本的区别 LINUX内核版本 是指系统内核的版本号。LINUX的内核具有两种不同的版本号,实验版本和产品化版本。要确定 LINUX版本 的类型,只要查看一下版本号:每一个版本号由三位数字组成,第二位数字说明版本类型。如果第二位数字是偶数则说明这种版本是产品化版本,如果是奇数说明是实验版本。如2418是产品化版本,2521是实验版本。查看 linux内核版本 命令:uname -r Linux发行版本 是指一些 Linux厂商 将 LINUX系统内核 与应用软件及文档包装在一起,并提供一些安装界面和系统设定与管理工具,这就构成了一个发行套件。

相对于内核版本,发行套件的版本号是随着发布者的不同而不同,与系统内核的版本号是相对独立的。比如 RedHat AS40 UP4 的 内核版本 是269-42。Linux是GNU/Linux的缩写,通常指各种Linux发行版的通称。 常见的Linux厂家主要有Redhat/Novell等。 Redhat有两大Linux产品系列,其一是免费的Fedora Core系列 主要用于桌面版本,提供了较多新特性的支持。 另外一个产品系列是收费的Enterprise系列,这个系列分成:AS/ES/WS等分支。 Advanced Server,缩写即AS。AS在标准Linux内核的基础上, 做了性能上的增强,并提高了可靠性,集成了众多常见服务器的驱动程序。 可轻松识别IBM/DELL/HP等常见机架式服务器的磁盘阵列卡等设备。 AS主要版本2x/3x/4x,也就是我们所说的AS3/AS4 每一个版本还有若干个升级,例如最早推出的AS4后,遇到了一些更新 此时就会发布AS4 Update1,以后还会陆续有AS4 Update2/Update3等出现 简称AS4u1/AS4u2/AS4u3等。这和微软的发布形式也是非常类似的, 微软的Windows NT4 从SP1出到SP6,Windows2000从SP1出到AS这些Update版本所包含的主要程序包版本都有一定差别,最好不要混用 否则很容易出现问题。Prima和Plesk的安装包,对于各种发行版都有了针对性的设计 在下载页面上,通常都会标识出来,支持哪些版本和哪些update的系统。

ES,是AS的精简版本。他与常见的AS系列的区别是,AS支持到4路以上CPU, 而ES只能支持两路CPU。AS和ES在大多数程序包上并无区别, 只在内核等少数软件包上有差异。 AS和ES的售价差别比较大,通常ES用在随服务器一同购买的OEM版本中 例如购买DELL服务器,搭配的Linux会是ES系列。 如果要搭配AS系列,则需要多花数千元。 WS,是ES的进一步简化版,主要针对企业内部的桌面办公市场,国内较少采用。 Redhat的Fedora Core Linux和Enterprise Linux,都需要遵循GNU协议 即需要发布自己的源代码。 所以,对于免费的Fedora Core Linux,从Redhat网站上可以直接下载ISO刻盘, 还能下载到SRPM的ISO,即程序包源码光盘。

对于收费的Enterprise Linux系列,是一款商业产品,所以网站上不能下载到ISO文件, 需要购买正式授权方可。 由于Enterprise Linux也需要遵循GNU协议,故必须发布源代码。 所以在Redhat的网站上,可以获得AS/ES/WS系列的SRPM源码ISO文件。 这些文件可以被自由的下载,修改代码,重新编译使用。 一个名为Community Enterprise Operating System的项目诞生了。 他的缩写既是CentOS。CentOS社区将Redhat的网站上的所有源代码下载下来, 进行重新编译。重新编译后,由于AS/ES/WS是商业产品, 必须将所有Redhat的Logo和标识改成自己的CentOS标识。 比如将AS4原版的SRPM源码编译后,就成为了CentOS 40。 AS4Update1的源码编译后,就成为了CentOS41。 AS4Update2的源码编译后,就成为了CentOS42。 同理,CentOS的3x/4x都对应着相应的版本。

所以我们说,CentOS就是Redhat的AS/ES/WS的免费版本。 使用CentOS,可以获得和AS/ES相同的性能和感受。 CentOS除了提供标准的编号1~4或者1~5的若干张ISO以外, 还提供了最小化1CD的Server光盘。用Server光盘安装好的系统, 就是一个最小化的Linux内核加上常用的>

开放源码软件通常是有版权(copyright)的,它的许可证可能包含这样一些限制:着意地保护它的开放源码状态,著者身份的公告,或者开发的控制

实际上,开源软件同时涉及源码本身和开发过程,涵盖了三个方面的意义:免费分发的源代码、模块化的体系和集市式的开发--在这种开发方式中,任何地方的任何人都可以参与最终产品的制造,三个方面互相之间有密切的联系,集市式的开发过程给开源软件以强大的改错能力,因为它将程序中的错误公开给了数量巨大的观众,他们都是潜在的改错者

另一方面,任何人都可以复用和发行开源软件的代码这一事实又支持了公众利益,因为创新的观念被整个集市所共享

另外,"opensource"这一术语还被延伸到其他智力团体中,指那些可通过公开手段获得的智力资源,比如报纸、教学课件等

美国一些进步的评论家指出,在象网络这样的虚拟环境中,驱动系统的底层代码,尤其是广为人知的那些应用程序之间的通信协议,它们在某种意义上很象现实社会中的法规

换句话说,这些代码对网上的行为给出了一些规范,它鼓励某些行为,而限制其他行为,就像现实社会的法律一样

因此,开放源码带来了一个更民主的开发方式,在这种方式下,好的主意将被集体分享,而不是作为智力资本被个人秘藏着

在这种意义上,开放源码实质上成为一种政治哲学

开放源码的精神在于使用者可以使用、复制、散布、研究、改进软件

最早可以回朔到1960年代

当时,售卖大型计算机的厂商如IBM,把一些软件及原始码一并送给客户,让客户能够因不同需求而自行更改软件

在1991-1992年期间,住在芬兰的LinusTorvald制造了第一版的Linux *** 作系统

在一群热心的程序人员努力下,把Linux *** 作系统以及外围的应用程序逐一打造

出名的作品除了趋于成熟的Linux *** 作系统外,还有Apache网页服务器、Perl程序语言、MySQL数据库、Mozilla浏览器、OpenOffice等等

嵌入式Linux开发流程

在一个嵌入式系统中使用Linux开发,根据应用需求的不同有不同的配置开发方法,但是一般都要经过如下的过程:

1.建立开发环境

*** 作系统一般使用RedHat-Linux,版本从7到9都可以,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(例如arm-Linux-gcc、arm-μclibc-gcc),或者安装产品厂家提供的交叉编译器。

2.配置开发主机

配置MINICOM,一般的参数为波特率为115 200bps,数据位为8位,停止位为1,无奇偶校验,软件硬件流控设为无。在Windows下的超级终端的配置也是这样的。MINICOM软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络,主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。

3.建立引导装载程序BOOTLOADER

从网络上下载一些公开源代码的BOOTLOADER,如U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据自己具体的芯片进行移植修改。有些芯片没有内置引导装载程序,例如三星的ARM7、ARM9系列芯片,这样就需要编写开发板上Flash的烧写程序,网络上有免费下载的Windows下通过JTAG并口简易仿真器烧写ARM外围Flash芯片的烧写程序,也有Linux下的公开源代码的J-Flash程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是系统正常运行的第一步。如果购买了厂家的仿真器当然比较容易烧写Flash,这对于需要迅速开发自己产品的人来说可以极大地提高开发速度,但是其中的核心技术是无法了解的。

4.下载别人已经移植好的Linux *** 作系统

如μCLinux、ARM-Linux、PPC-Linux等,如果有专门针对所使用的CPU移植好的Linux *** 作系统那是再好不过的,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,对于μCLinux这样的系统则需编译进内核进行调试。

5.建立根文件系统

从>

以上就是关于我想在linux下写一个c程序调用linux的可执行文件或者程序,怎么做全部的内容,包括:我想在linux下写一个c程序调用linux的可执行文件或者程序,怎么做、Win CE、Linux、ADS三者有什么区别,混淆了、Linux发行版和Linux内核的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10107032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存