栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Linux中从C执行Shell脚本?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Linux中从C执行Shell脚本?

这取决于您要对脚本(或要运行的任何其他程序)执行的操作。

如果只想运行脚本,这

system
是最容易的事情,但是它也做其他一些事情,包括运行shell并让其运行命令(在大多数* nix下是/ bin
/ sh)。

如果您要通过标准输入来输入shell脚本或使用其标准输出,则可以使用

popen
(和
pclose
)设置管道。这也使用外壳程序(大多数* nix下是/
bin / sh)来运行命令。

这两个都是库函数,它们在幕后发挥了很多作用,但是如果它们不能满足您的需求(或者您只是想尝试和学习),那么您也可以直接使用系统调用。这也使您避免让shell(/
bin / sh)为您运行命令。

感兴趣的系统调用

fork
execve
waitpid
。您可能要使用其中一种库包装器
execve
(类型
man 3exec
为它们的列表)。您可能还想使用其他等待功能之一(
man 2wait
全部包含)。此外,您可能会对系统调用感兴趣,
clone
并且
vfork
这些调用与fork有关。

fork
复制当前程序,唯一的不同是新过程从fork的调用返回0。父进程获取返回的新进程的进程ID(或错误)。

execve
用新程序替换当前程序(保持相同的进程ID)。

waitpid
由父进程用于等待特定的子进程完成。

将fork和execve步骤分开可以使程序在创建新流程之前对其进行一些设置(而不会弄乱自己)。这些措施包括将标准输入,输出和stderr更改为与所使用的父进程不同的文件,更改进程的用户或组,关闭子进程不需要的文件,更改会话或更改环境变量。

您可能还对

pipe
dup2
系统调用感兴趣。
pipe
创建一个管道(具有输入文件描述符和输出文件描述符)。
dup2
将文件描述符复制为特定文件描述符(
dup
类似,但将文件描述符复制到最低可用文件描述符)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/412251.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号