Linux C程序如何调用Shell命令 (linux c 调用shell)

概述

在Linux C程序中,如果想要调用Shell命令,可以使用system函数或popen函数。system函数是调用Shell命令来执行某个操作,并将结果输出到标准输出设备。popen函数可以执行Shell命令,并可以通过管道来在程序中传递数据。

system函数

系统函数可以使用man system手册页面,在终端输入`man system`来查看。在Linux中,system函数的原型如下:

“`c

int system(const char *command);

“`

该函数可以执行command字符串中指定的Shell命令,并将命令的输出结果输出到标准输出设备。如果命令执行成功,system函数返回0,否则返回非0值。

下面是一个使用system函数调用Shell命令的示例:

“`c

#include

#include

int mn()

{

int ret = system(“ls -la”);

if (ret == 0)

{

printf(“Command executed successfully!\n”);

}

else

{

printf(“Command fled to execute!\n”);

}

return 0;

}

“`

上述代码中,我们调用了system函数来执行了一个`ls -la`命令,该命令会将当前目录下的所有文件和文件夹以长格式列出。如果system函数返回0,表示命令执行成功,我们在程序中输出一条成功执行的信息;反之,表示命令执行失败,我们在程序中输出一条错误信息。

popen函数

popen函数与system函数类似,都可以调用Shell命令。不同的是,popen函数可以通过管道来在程序中传递数据。也就是说,我们可以通过popen函数来获取Shell命令的输出结果,并将结果传递给程序中的其他函数。

popen函数同样可以使用man popen手册页面,在终端输入`man popen`来查看。在Linux中,popen函数的原型如下:

“`c

FILE *popen(const char *command, const char *type);

“`

popen函数接受两个参数,之一个参数command是要执行的Shell命令,第二个参数type是指定管道的类型,取值为”r”或”w”。如果type为”r”,则将建立一个只读管道,可以从管道中读取Shell命令执行的输出结果;如果type为”w”,则建立一个只写管道,可以将数据写入管道传递给Shell命令。

下面是一个使用popen函数调用Shell命令并传递数据的示例:

“`c

#include

#include

int mn()

{

FILE *fp;

char buff[1024];

fp = popen(“ls -la”, “r”);

if (fp == NULL)

{

printf(“Fled to open pipe!\n”);

exit(1);

}

while (fgets(buff, sizeof(buff), fp) != NULL)

{

printf(“%s”, buff);

}

pclose(fp);

return 0;

}

“`

在上述代码中,我们使用popen函数来执行一个`ls -la`命令,并建立一个只读管道来读取命令的输出结果。在循环中,我们使用fgets函数从管道中读取每一行输出结果,并将其打印到标准输出设备中。最后我们使用pclose函数关闭管道。

结论

相关问题拓展阅读:

在linux 用shell脚本调用C语言的执行文件,用到什么函数,求大神帮分析一下

c调用蔽含蚂shell为system(cmd)

shell调用c执老败行文件和调用普通的命令宏埋一样,如 ls cd pwd等命令都是c写的执行文件

直接用$符不能吗?是不是权限不够

up一下

exec

ASP.NET 如何调用linux下的Shell脚本程序?

Apache+Mysql+PHP(含GD,libpng,jpeg,zlib,freetype,freeTDS,awstats)安装与配置

作者:swingcoder(at)msn(dot)com

日期:

一、前言

安装的问题很多人都之一次要面对的,既简单又麻烦。很多老鸟都对如何安装的问题不屑,说:问来问去都是安装的问题。

希望这的贴子对新手能有点帮助,老鸟的话,就不用看了,免得拍砖。谢谢~~

本文所有软件均使谈和缓用最新版(至发布日期),但是又有人说了,什么版本不稳定啦,这不好那不好啦。Cut!就此打住,我也不想为这些问题纠缠不清了,此文仅仅是安装。先让大家用起来,具体的优化安全以后再说,应了一句话“先让一部分人先富起来!“。

虽然仍然是重复劳动,但至少是含模自己的经验,不想丢了,写完后自己以后也可以看棚派看,顺便整理整理。

二、目的

安装Apahe与MySQL,将php安装成支持gif,png,jpeg,freetype,mssql,mysql,需要更强大的图形处理能力,可安装ImageMagic。可以分析大流量网站日志(更大流量的网站推荐用Webalizer,不过界面简陋:-,)。

二、安装环境描述

操作系统:GNU Linux kernel 2.4.20

web服务器:Apache httpd-2.0.48 下载:

数据库服务器:mysql-standard-4.0.17-pc-linux-i686 下载:

脚本程序语言:PHP Version 4.3.5RC5-dev 下载:

其它库文件:

ZLIB:zlib-1.2.1.tar.gz 下载:

FreeType:freetype-2.1.5.tar.gz 下载:

PNG:libpng-1.2.5.tar.gz 下载:

JPEG:jpegsrc.v6b.tar.gz 下载:

GD:gd-2.0.18.tar.gz 下载: #2.0不支持GIF?好像限制又过期了

FreeTDS:freetds-stable.tgz 下载:

Cronolog:cronolog-1.6.2.tar.gz 下载:

Awstats:awstats-5.9.tgz 下载:

三、安装步骤

1、安装Apache

tar xzvf httpd-2.0.48.tar.gz

cd httpd-2.0.48

./configure –prefix=/usr/local/apache –enable-so

make

make install

echo “/usr/local/apache/bin/apachectl start&” >> /etc/rc.d/rc.local

#启动

/usr/local/apache/bin/apache start

2、安装MySQL

tar xzvf mysql-standard-4.0.17-pc-linux-i686.tar.gz

#此处下载的的二进制分发包,故没有./configure步骤

mv mysql-standard-4.0.17-pc-linux-i686 /usr/local/mysql

cd /usr/local/mysql

#下步cp要看服务器硬件环境,可选all,medium,large,huge

cp support-files/my-medium.cnf /etc/my.cnf

echo “/usr/local/mysql/bin/safe_mysqld –user=mysql&” >> /etc/rc.d/rc.local

groupadd mysql

useradd -g mysql mysql

./scripts/mysql_install_db

chown -R mysql.mysql data

#启动

/usr/local/mysql/bin/safe_mysqld –user=mysql&

3、安装PHP

A、先安装支持包(注意安装顺序)

建立初始目录:

#php目录

mkdir /usr/local/php

mkdir /usr/local/php/modules

#freetype目录

mkdir /usr/local/php/modules/freetype

#jpeg目录

mkdir /usr/local/php/modules/jpeg6

mkdir /usr/local/php/modules/jpeg6/bin

mkdir /usr/local/php/modules/jpeg6/lib

mkdir /usr/local/php/modules/jpeg6/include

mkdir /usr/local/php/modules/jpeg6/man

mkdir /usr/local/php/modules/jpeg6/man/man1

#gd目录

mkdir /usr/local/php/modules/gd

#freeTDS目录

mkdir /usr/local/php/modules/freetds

A1、安装zlib

tar xzvf zlib-1.2.1.tar.gz

cd zlib-1.2.1

#不要用–prefix自定义安装目录,影响gd的安装

./configure

make

make install

A2、安装freetype

tar xzvf freetype-2.1.5.tar.gz

cd freetype-2.1.5

./configure –prefix=/usr/local/php/modules/freetype

make

make install

A3、安装libpng

tar xzvf libpng-1.2.5.tar.gz

#不要用–prefix自定义安装目录,影响gd的安装

cd libpng-1.2.5

cp scripts/makefile.std makefile

make test

make install

A3、安装jpeg

tar xzvf jpegsrc.v6b.tar.gz

./configure –prefix=/usr/local/php/modules/jpeg6 –enable-shared –enable-static

make

make install

A4、安装GD

tar xzvf gd-2.0.18.tar.gz

./configure –prefix=/usr/local/php/modules/gd –with-jpeg=/usr/local/php/modules/jpeg6 –with-png –with-zlib –with-freetype=/usr/local/php/modules/freetype

make

make install

A5、安装FreeTDS

tar zxvf freetds-stable.tgz

cd freetds-stable

./configure –prefix=/usr/local/php/modules/freetds

make

make install

B、安装Cronolog

tar zxvf cronolog-1.6.2.tar.gz

cd cronolog-1.6.2

./configure

make

make install

C、安装PHP

tar xzvf php4-STABLE-latest.tar.tar

cd php4-STABLE-latest

./configure –prefix=/usr/local/php –with-jpeg=/usr/local/php/modules/jpeg6 –with-zlib –with-png –with-gd=/usr/local/php/modules/gd –with-freetype=/usr/local/php/modules/freetype –with-mssql=/usr/local/php/modules/freetds –enable-magic-quotes –with-apxs2=/usr/local/apache/bin/apxs –with-mysql=/usr/local/mysql

make

make install

四、一些特别的配置

1、配置Apache

修改httpd.conf文件:

#增加处理性能

MaxClient 250

StartServers 10

#设置PHP

LoadModule php4_module libexec/libphp4.so

#AddModule mod_php4.c

AddType application/x-httpd-php .php

#This directive configures what you return as the Server HTTP response Header

ServerTokens Minor

#Optionally add a line containing the server version and virtual host name to server-generated pages

ServerSignature Off

#设置日志存储格式

CustomLog “|/usr/local/in/cronolog /usr/local/apache/logs/access_%y%m%d.log” combined

2、配置Awstat

#!!此程序需要perl的支持!!

tar xzvf awstats-5.9.tgz

mkdir /usr/local/apache/cgi-bin/webstat/

mkdir /usr/local/apache/weblog/

cd awstat/www/

cp icon/* /usr/local/apache/icons/

cp cgi-bin/ /usr/local/apache/cgi-bin/webstat/

cd /usr/local/apache/cgi-bin/webstat/

cp awstat.model.conf awstat.

#修改awstat.中下…?用默认值:

vi awstat.

LogFile=”/usr/local/apache/logs/access_%YY%MM%DD.log”

SiteDomain=””

DirData=”/usr/local/apache/weblog/”

DirIcons=”/icons”

#修改awstats.pl为0777

chmod 0777 awstats.pl

#设置计划任务

crontab -e

55 23 * * * (/usr/local/apache/cgi-bin/webstat/awstats.pl -update -config=>/dev/null)

3、配置MySQL

修改root用户密码

/usr/local/mysql/bin/mysqladmin -u root password ‘your-new-password’

删除host为%和密码为空的用户

调整性能:

max_connections=250 #default is 100 #影响pconnect数量

table_cache=128 #default 64,调整值根据实际情况而定,一般如果Open_tables 达到table_cache值,且Opened_tables仍在快速增长,要增大该值。

key_buffer_size= #根据实际情况而定,一般Key_reads : Key_read_requests小于1:1000

4、配置PHP

默认安装的PEAR有,如果用不上的话可以删除:

DB – installed: 1.6.0

HTTP – installed: 1.2.2

Mail – installed: 1.1.2

Net_TP – installed: 1.2.3

Net_Socket – installed: 1.0.1

XML_Parser – installed: 1.0.1

XML_RPC – installed: 1.0.4

更多信息请参考:

五、常见问题

1、安装PHP

a、checking lex output file root… ./configure: line 2425: lex: command not found

configure: error: cannot find output from lex; giving up

缺少flex-2.5.4a-29.i386.rpm,从linux 9.0光盘中找到flex-2.5.4a-29.i386.rpm,安装,重新编译php,ok.

b、ext/gd/gd.lo(.text+0x875): undefined reference to `gdFreeFontCache’

*** Error code 1

php.net官方人士说是安装了不同版本的GD或者推荐安装低版本的php,但我是安装了高于php-4.3.4.tar.gz后解决了此问题。

参考:

2、安装jpeg

一定要选择./configure –enable-shared –enables-static –prefix=/usr/local方式安装,否则不能make install !!!

若没有装libtool-1.4.3-5.i386.rpm,不能创建共享libjpeg库,即不是能–enable-shared指令编译。

装libtool之前要装m4-1.4.1-13.i386.rpm,automake,autoconf及

若您下载的包为zip格式jpegsr6.zip时,./configure 时出现: bad interpreter:,原因是dos换行跟unix换行符不同造成的,在editplus在转换格式后,jpeg-6a安装成功

3、安装libpng

安装之前要先安装zlib, 且不有自定义目录,否则装gd时找不到库文件。

4、安装MySQL

此文中因为安装的是二进制分发包,帮没有configure,如果是源码包,依照如下格式安装。

shell> groupadd mysql

shell> useradd -g mysql mysql

shell> tar xzvf mysql-VERSION.tar.gz

shell> cd mysql-VERSION

shell> ./configure –prefix=/usr/local/mysql

shell> make

shell> make install

shell> scripts/mysql_install_db

shell> chown -R root /usr/local/mysql

shell> chown -R mysql /usr/local/mysql/data

shell> chgrp -R mysql /usr/local/mysql

shell> cp support-files/my-medium.cnf /etc/my.cnf

shell> /usr/local/mysql/bin/mysqld_safe –user=mysql &

五、参考资源

1、apache

2、mysql

3、php

4、GD

5、FreeTDS

6、Cronolog

7、Awstats

8、Webalizer

六、总结

上述仅仅是简单的安装跟一些简单的配置,肯定存在不少漏洞,希望大家多多留心,任何程序和配置,最关键的在决定因素往往在于--“配置者”本身。希望对有需要的人有一定的帮助。

如果你不想装apache可以略过apache安装那部分

关于linux c 调用shell的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux C程序如何调用Shell命令 (linux c 调用shell)