`

如何在C语言中调用SHELL命令

 
阅读更多

1system(执行shell 命令)

相关函数:forkexecvewaitpidpopen

表头文件:#include<stdlib.h>

定义函数:int system(const char * string);

函数说明:system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINTSIGQUIT 信号则会被忽略。

 

返回值

如果system()在调用/bin/sh时失败则返回127

其他失败原因返回-1。若参数string为空指针(NULL)

则返回非零值。

如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因此最好能再检查
errno
来确认执行成功。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

附加说明:在编写具有SUID/SGID权限的程序时请勿使用system()system()
继承环境变量,通过环境变量可能会造成系统安全的问题。

 

范例:

#include<stdlib.h>
main()
{
system(“ls -al /etc/passwd /etc/shadow”);
}

 

2popen(建立管道I/O

相关函数:pipemkfifopcloseforksystemfopen
表头文件:#include<stdio.h>
定义函数:FILE * popen( const char * command,const char * type);
函数说明:popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了fclose()以外。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

返回值:若成功则返回文件指针,否则返回NULL,错误原因存于errno中。
错误代码 EINVAL参数type不合法。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

注意事项:在编写具SUID/SGID权限的程序时请尽量避免使用popen()popen()
会继承环境变量,通过环境变量可能会造成系统安全的问题。

范例:

#include<stdio.h>

main()

{

FILE * fp;

char buffer[80];

fp=popen(“cat /etc/passwd”,”r”);

fgets(buffer,sizeof(buffer),fp);

printf(“%s”,buffer);

pclose(fp);

}

执行 root :x:0 0: root: /root: /bin/bash

 

3、使用vfork()新建子进程,然后调用exec函数族

#include<unistd.h>
main()
{
    char * argv[ ]={“ls”,”-al”,”/etc/passwd”,(char*) };
  
    if(vfork() = =0)
    {
        execv(“/bin/ls”,argv);
    }else{       
        printf(“This is the parent process\n”);
    }
}

 

 

分享到:
评论

相关推荐

    解析如何在C语言中调用shell命令的实现方法

    在C语言中调用shell命令是一项常见的需求,特别是在与操作系统进行交互时。本文将详细解析两种主要的方法:`system()`函数和`popen()`函数,以及一个更底层的方法——使用`vfork()`和`exec`函数族。 1. **`system()...

    用C语言实现的shell

    1. **命令解析**:在C语言实现的shell中,首先要实现的是命令解析。这涉及到字符串处理,如使用`strtok()`函数分割用户输入的命令行,识别命令、参数和路径等。 2. **命令执行**:shell需要能够调用系统的`execve()...

    shell命令解析器

    在本文中,我们将深入探讨shell命令解析器的工作原理,以及如何使用C语言编程来模拟一个简单的shell命令解析器。 首先,我们需要理解shell的基本功能。shell提供了一个交互式的环境,用户可以输入命令,如`ls`、`cd...

    C实现Linux中Shell部分命令.zip

    在Linux操作系统中,Shell是一种命令行解释器,它允许用户通过文本输入来执行系统命令。C语言实现Linux Shell的功能是一项有趣的编程挑战,可以深入理解操作系统的工作原理。本项目旨在用C语言实现一些基本的Shell...

    模拟shell命令解释器操作系统课程设计报告

    - **开发环境与目标**:本项目旨在通过使用C语言,在Linux/Unix平台上开发一个命令解释器程序。该程序的目标是模仿现有的shell命令行界面的功能,从而为用户提供一套基本但实用的命令执行环境。 - **核心功能**: -...

    Linux中Shell编程和C语言编程

    `shell编程.pdf`中或许也包含了一些关于如何在C程序中调用Shell命令的示例。 `vim_中文参考手册.pdf`是关于Vim编辑器的文档,这是一款强大的文本编辑器,常用于编写Shell脚本和C程序。它提供了丰富的快捷键和功能,...

    shell:《 C语言实现Linux Shell命令解释器》项目可以学习Linux系统编程能力,尤其是在多进程方面。可以了解到fork,execvp等重要的系统调用。另外可以深入理解Linux Shell的功能的实现手段。

    一,实验简介《 C语言实现Linux Shell命令解释器》项目可以学习Linux系统编程能力,尤其是在多进程方面。可以了解到fork,execvp等重要的系统调用。另外可以深入理解Linux Shell的功能的实现手段。 。为了测试方便,...

    C语言写的简单Shell程序

    当你在Shell中启动一个程序并按下`&`时,程序会在后台运行,而你能够继续输入其他命令。`jobs`命令用于列出当前所有的后台任务,`fg`(foreground)命令则用来将后台任务带到前台继续执行。 2. **FG(Foreground)*...

    C语言实现Linux内核Shell程序

    1.1. 课程设计内容 ...即用户可以使用“&”作为一个命令,表示该命令在后台启动。前台还可以处理其他命令。 (3)修改程序,增加I/O重定向功能。即用户可以使用“&gt;”,“&lt;”和“|”符号改变程或文件的输入和输出。

    linux下用C语言写的模拟shell环境的程序

    在Linux操作系统中,C语言是一种常用的底层编程语言,可以用来创建强大的系统级工具,包括模拟shell环境的程序。shell是用户与操作系统内核交互的接口,它接收用户的命令并执行相应的系统调用。本项目中,开发者使用...

    C语言实现的shell终端,支持管道、重定向等.zip

    1. **进程控制**:在shell中,用户可以启动新的进程来执行命令。在C语言中,这通常通过调用`fork()`函数来实现,创建子进程。然后,使用`exec()`系列函数(如`execl()`, `execlp()`, `execv()`, `execvp()`等)加载...

    c语言实现简单的命令解析器

    在C语言中实现这些命令需要对网络协议和设备驱动有深入理解,并可能涉及到与硬件交互的低级操作。 4. **与Linux系统交互**: 要在C程序中执行Linux命令,可以使用`system()`函数,它会启动一个新的shell进程来执行...

    在LINUX C中以多进程方式实现微型SHELL.pdf

    "在LINUX C中以多进程方式实现微型SHELL" 本文主要讨论了在Linux C中使用多进程方式实现微型SHELL的设计与实现。Linux C为用户提供了一个强大的编程环境,本文分析了微型SHELL的基本功能及实现机制,并使用Linux下...

    unix下的一个shell的C语言程序

    - **循环读取命令**:在Shell中,需要不断地读取用户输入并执行,直到用户选择退出。 通过分析和调试这个程序,你不仅可以掌握Unix Shell的基本工作原理,还能深化对C语言系统编程的理解,提升解决问题的能力。对于...

    linux下自己用c语言编写的模拟shell

    1、应用UNIX的fork()等系统调用,编写一个c程序具有以下功能: a) 实现Shell的基本功能,包括有:打印提示符; 接受和分析命令行(滤去无效的空格、tab符号以及换行符等);执行命令(要有出错处理;输入exit...

    浅析如何在c语言中调用Linux脚本

    在C语言中调用Linux脚本通常通过`system()`函数或者`popen()`函数实现,这两个函数都是标准C库提供的,可以直接调用shell命令执行脚本。 1. 使用`system()`函数 ```c #include int main() { int result; ...

    C语言获取Shell返回结果的实现方法

    Linux编程时候,如果我们需要调用shell命令或脚本通常使用system方法。如system&#40;“ls”&#41; 该方法返回值为0或-1,即成功或失败。而有的时候我们想要获取shell命令执行的结果,该怎么办呢? 我们可以将shell...

    C语言编写的命令解析程序

    在C语言中,这可能通过函数指针实现,或者通过`system()`函数来执行shell命令。 5. **错误处理**:如果用户输入的命令无效或格式错误,解析器需要提供反馈。这可能包括打印错误信息或者返回错误码。 在"黄雪虹...

Global site tag (gtag.js) - Google Analytics