c语言实现linux命令,Linux怎么学

大家好,今天来为大家分享c语言实现linux命令的一些知识点,和Linux怎么学的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

linux下怎样用c语言调用shell命令

C程序调用shell脚本共同拥有三种法子:system()、popen()、exec系列数call_exec1.c,

system()不用你自己去产生进程。它已经封装了,直接增加自己的命令

exec须要你自己 fork进程,然后exec自己的命令

popen()也能够实现运行你的命令,比system开销小

方法一、system()的使用。我直接上代码吧

int system(const char*command);

我在/home/book/shell新建一个test.sh文件例如以下:

<span style="font-size:18px;"><span style="font-size:18px;">#!bin/bash

echo$HOME

echo"the is test!"</span></span>

test.c文件例如以下:

<span style="font-size:18px;"><span style="font-size:18px;">#include<stdlib.h>

int main()

{

system("bash/home/book/shell/test.sh");/* chmod+x test.sh,路径前面要加上bash*/

return 0;

}</span></span>

运行例如以下命令来编译:

<span style="font-size:18px;">gcc test.c-o test

</span>

测试命令:

<span style="font-size:18px;">./test</span>

结果例如以下:

<span style="font-size:18px;">/root

the is test!</span>

方法二:popen()会调用fork()产生子历程,然后从子历程中调用/bin/sh-c来履行参数command的指令。参数type可应用“r”代表读取。“w”代表写入。遵循此type值。popen()会建立管道连到子历程的标准输出设备或标准输入设备,然后返回一个文件指针。

随后历程便可利用此文件指针来读取子历程的输出设备或是写入到子历程的标准输入设备中。此外,全部应用文件指针(FILE*)操作的函数也都能够应用,除了fclose()以外。

返回值:若成功则返回文件指针,否则返回NULL,差错原因存于errno中。注意:在编写具SUID/SGID权限的程序时请尽量避免应用 popen()。popen()会继承环境变量。通过环境变量可能会造成系统安全的问题

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

int pclose(FILE*stream);

其它不用改变我们直接改动test.c文件:

#include<stdio.h>

int main()

{

char buffer[80];

FILE*fp=popen("bash/home/book/shell/test.sh","r");

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

printf("%s",buffer);

pclose(fp);

return 0;

}

方法三:exec函数簇(我不太懂,copy别人的。也没有验证。习惯方法一)

须要注意的是exec并非1个函数,事实上它仅仅是一组函数的统称,它包含以下6个函数:

#include<unistd.h>

int execl(const char*path, const char*arg,...);

int execlp(const char*file, const char*arg,...);

int execle(const char*path, const char*arg,..., char*const envp[]);

int execv(const char*path, char*const argv[]);

int execvp(const char*file, char*const argv[]);

int execve(const char*path, char*const argv[], char*const envp[];

能够见到这6个函数名字不同,并且他们用于接受的参数也不同.

实际上他们的功能都是几乎相同的,由于要用于接受不同的参数所以要用不同的名字区分它们,毕竟c语言没有函数重载的功能嘛..

可是实际上它们的命名是有规律的:

exec[l or v][p][e]

exec函数里的参数能够分成3个部分,运行文件部分,命令参数部分,环境变量部分.

比如我要运行1个命令 ls-l/home/gateman

运行文件部分就是"/usr/bin/ls"

命令参赛部分就是"ls","-l","/home/gateman",NULL见到是以ls开头每1个空格都必须分开成2个部分,并且以NULL结尾的啊.

环境变量部分,这是1个数组,最后的元素必须是NULL比如 char* env[]={"PATH=/home/gateman","USER=lei","STATUS=testing", NULL};

好了说下命名规则:

e兴许,参数必须带环境变量部分,环境变零部分参数会成为运行exec函数期间的环境变量,比较少用

l兴许,命令参数部分必须以","相隔,最后1个命令参数必须是NULL

v兴许,命令参数部分必须是1个以NULL结尾的字符串指针数组的头部指针.比如char* pstr就是1个字符串的指针, char* pstr[]就是数组了,分别指向各个字符串.

关于Linux命令的介绍,看看《linux就该这么学》,具体关于这一章地址3w(dot)linuxprobe/chapter-02(dot)html

p兴许,运行文件部分能够不带路径, exec函数会在$PATH中找

还有1个注意的是, exec函数会代替运行它的进程,也就是说,一旦exec函数运行成功,它就不会返回了,进程结束.可是假设exec函数运行失败,它会返回失败的信息,并且进程继续运行后面的代码!

通常exec会放在fork()函数的子进程部分,来替代子进程运行啦,运行成功后子程序就会消失,可是运行失败的话,必须用exit()函数来让子进程退出!

在Linux系统中,如何运行一个C语言程序

1、打开kali linux的终端。创建一个文件并命名为test.c。在终端输入:touch test.c。

2、可以看到已经生成了一个后缀为test.c的源文件。然后用vim工具打开这个文件并编写代码。在终端中输入:vim test.c或者gvim test.c打开这个文件并编写代码。

3、编写完了这个代码。现在开始编译源文件。在终端中输入:gcc test.cgcc是linux自带的c语言编译器。如果是windows则要用ide工具来编译。linux系统一般写C语言用gcc+vim+gdb三个自带的工具就可以了。

4、打完gcc test.c编译完C源文件。然后就可以看见a.out的文件。一般linux系统就默认为a.out为编译完的文件。现在运行a.out文件。在a.out文件的目录下打开终端并输入./a.out就是运行文件了。

5、如果想要编译完的文件名不要用a.out文件。就可以在编译时打入.gcc test.c-o test.out然后就可以看见有一个test.out.文件了。-o后面跟着的编译生成的文件名。

6、再运行test.out在终端中输入./test.out结果如图。这样在linux系统下编译并运行C语言就完成了。

C语言中实现Linux命令交互c语言调用linux命令

Linux是一种开源操作系统,可以使用Linux命令行来操纵和管理操作系统。C语言是一种常用的低级编程语言,能够高效的实现操作系统的功能。使用C语言可以在Linux系统中实现Linux命令的交互,从而让Linux系统实现特定的功能和指令。

要实现Linux命令的交互,首先就是要在C语言中编写程序。程序的主要目的是使用C语言的系统调用函数(system call)来实现Linux系统的交互,来执行Linux系统的命令和指令。这要求程序员要先查看要实现的功能并熟悉对应的系统调用函数,其次在C程序中添加系统调用函数,然后调用execve系统调用函数来执行Linux命令,最后检查程序输出结果,以确保程序是正确地实现Linux命令的功能。

下面我们通过一个例子来说明如何使用C语言在Linux系统中实现Linux命令的交互:

include

include

include

int main(void)

{

char*argv[]={“ls”,”-al”,NULL};

//在此调用execve系统调用函数,来执行ls-al命令

execv(“/bin/ls”,argv);

//此处以后的代码会被忽略

printf(“This line will never be printed.\n”);

return 0;

}

此程序以一个参数数组的形式将参数传入execv函数,execv函数调用“/bin/ls”,来实现通过C程序执行“ls-al”命令,然后程序执行结束或者execv函数发生错误;C程序执行完毕,在终端输出指令执行的结果。

以上就是使用C语言实现Linux命令的交互的实现过程,通过C语言编写的程序可以实现复杂的Linux系统命令操作,可以实现系统的功能扩展,从而更好的满足用户需求。

阅读剩余
THE END