概述
在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语言的执行文件,用到什么函数,求大神帮分析一下
- ASP.NET 如何调用linux下的Shell脚本程序?
在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的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。