malloc, memset, calloc 三个常用的 Linux C系统编程函数

c语言里面system什么意思

哎呀,我当时经常用这个,遇到了很多问题。

我记得有一年,我编写了一个小工具,要求用户单击一个按钮来列出特定文件夹中的文件名称。
对于Windows系统,我直接使用系统命令(“dir /s /a-d”)。
嗯,它工作得很好,只需列出它即可。
不假思索,我觉得这个功能很简单。

结果是什么?曾经有一个愚蠢的用户在文件夹中发现了一个名为 del.bat 的批处理文件。
我没有在 dir 命令后面添加引号,而是继续使用文件名作为命令。
各位好,del命令会自动执行,当前目录下的所有文件都会被删除!差点让我跳墙。
那时,我很快在代码中添加了引号,system("\"dir /s /a-d\""),然后什么也没发生。

还有一次,在 Linux 服务器上,我编写了一个脚本并想使用 system("ls -l") 来检查特定目录的文件权限。
用户输入参数,我继续将用户的输入键入命令字符串。
你猜怎么着?如果用户输入类似的内容; rm -rf /,然后会执行ls -l,然后rm -rf / 就会格式化整个系统盘!那时服务器上的数据已经来不及让我哭泣了。
从那时起,我对 system() 函数就非常小心了。
特别是在有用户输入的地方,我不会添加引号,或者只是使用一系列 exec 函数,这样更安全。

所以,如果可以使用system(),尽量使用简单的命令,不要让它随便执行用户输入的内容。
当时我就发现了这个小细节。

在linux下用C怎么将“cat /proc/mtd”这条命令早终端打印出来,并执行该命令的结果。

嘿,我得和你谈谈这件事。
当时我刚刚学习 C 语言,我想构建一些很酷的命令行工具。
我实际上尝试过你提到的想法。

记得有一次,在Linux服务器上,我在想如何用C语言直接将某个文件的权限信息传递给另一个命令。
当时我就想创建一个像cat /proc/mtd这样的命令,然后直接使用system()带着结果调用下一个命令,这样就不用自己去解析了。

您给出的代码的基本思想是正确的。
system()实际上是调用shell来串行执行命令。
例如, if system("ls /home | grep 'yourfile'");像这样写, ls /home 的结果通过管道传递给 grep 。

但是,您提到的 ./ 之前的反引号是我在使用它时永远无法识别的。
./ 是什么意思?看起来你的 /proc/mtd cat 直接嵌入到 system() 中,这有点令人困惑。
如果文件 /proc/mtd 不存在,你的代码就会爆炸,对吗?当时我就是从这个洞里走过的。
例如,在我的旧机器上,实际上没有像 /proc/mtd 这样的东西。
如果我直接使用它,我会得到一个错误。

所以后来我改用变量。
例如:
c 包含 包括
int main() { char mtd_info[1 00]; FILE fp;
// 首先执行cat /proc/mtd,并将结果保存到mtd_info fp = popen("cat /proc/mtd", "r"); 如果(fp==NULL){ perror("打开失败"); 返回1 ; } fgets(mtd_info, sizeof(mtd_info), fp); pclose(fp);
// 然后使用system执行包含mtd_info的命令 char cmd = malloc(strlen("your_command ") + strlen(mtd_info) + 1 ); 如果(cmd == NULL){ perror("malloc 失败"); 返回1 ; } sprintf(cmd, "your_command %s", mtd_info);
system(cmd); free(cmd);
返回0;
这是一个两步过程,首先存储结果,然后使用 system() 执行它。
感觉比直接把猫窝起来简单。
此外,popen比system()更灵活,可以处理命令输出。

我还使用了你提到的 cut 命令。
例如,有时 cat /proc/partition 的输出太长,所以我使用 cut -d '' -f1 来提取第一个字段。
你的切片代码是正确的,确实可以解决问题。

但是请注意system()的安全性是有问题的。
如果用户输入命令参数,则很容易受到注入攻击。
我就因为这个差点被拦下来。
例如,如果用户输入类似 ; rm -rf/,你的程序将结束。
因此,现在编写此类命令行工具时,我必须使用exec()函数链或fork() + exec()组合并自己手动解析命令和参数,这样安全得多。

最后,你的方法理论上是可行的,但是实际使用的时候你要考虑/proc/mtd是否存在,命令的输出格式是否正确,安全不安全。
只是时间到了当时我对这些东西不太重视,遇到了很多坑。

如何在C语言编程中调用linux系统终端下的命令

直接来说,system("ls-l")允许程序运行命令行ls-l。