#include "apue.h"
#include <sys/wait.h>
int main(void)
{
char buf[MAXLINE];//from apue.h
pid_t pid;
int status;
printf("%% ");//print prompt
while(fgets(buf,MAXLINE,stdin)!=NULL){
if(buf[strlen(buf)-1]=='\n')
buf[strlen(buf)-1]=0;//replace newline with null
if((pid=fork())<0){
err_sys("fork error");
}else if(pid==0){
execlp(buf,buf,(char *)0);
err_ret("couldn't execute: %s",buf);
exit(127);
}
/*parent*/
if((pid=waitpid(pid,&status,0))<0)
err_sys("waitpid error");
printf("%% ");
}
exit(0);
}
程序讲解:
(1)fgets函数为标准I/O函数,用于从标准输入读入一行,当键入Ctrl+D时,fgets返回一个null指针,于是循环终止,进程也终止。
(2)execlp函数要求参数以null结束,而不是以换行符结束。所以,此程序用标准C函数strlen计算此字符串的长度,然后用一个null字节替换换行符。
(3)调用fork创建一个新进程。新进程是调用进程的复制品,一般称调用进程为父进程,新创建的进程为子进程。fork函数向父进程返回子进程的进程ID(非负),对子进程则返回0.因为fork创建一个进程,所以说它被调用了一次(由父进程),但返回两次(分别在父进程及子进程中)。
(4)在子进程中,调用execlp函数以执行从标准输入读入的命令。这就用新的程序文件替换了子进程原先执行的程序文件。fork和跟随其后的exec两者的组合是某些操作系统所称的产生一个新进程。
(5)子进程调用execlp执行新程序文件,而父进程希望子进程等待子进程终止,这一要求由调用waitpid函数实现,其参数指定要等待的进程(在此程序里为pid)。
(6)该程序的限制是不能向所执行命令传递参数。
分享到:
相关推荐
DELPHI在Windows环境下执行DOS命令并获取返回结果是一个常见的需求,这通常涉及到系统交互和进程控制。在Delphi编程中,我们可以使用内置的`ShellExecute`函数或者通过创建进程对象来实现这一功能。本项目提供的代码...
总结,C#通过`Process`类实现了执行DOS命令的功能,同时可以结合Windows Forms或WPF的控件创建用户界面,让用户输入命令并显示结果。理解并熟练运用这些技术,能帮助开发者创建出与操作系统深度交互的应用程序。
3. 调用`CreateProcess`启动一个新的DOS命令进程,将管道的写端作为其标准输入,读端作为其标准输出。 4. 在主进程中,通过`ReadFile`函数从管道读端读取DOS命令的执行结果。 5. 执行完毕后,关闭所有打开的句柄,...
ATZ命令执行后,模块将恢复到出厂设置,所有配置都会重置。 4. AT+CGMR命令: 该命令用于查询模块的版本信息,包括模块型号和软件版本。 5. AT+IPR命令: AT+IPR命令用于改变串口的波特率,确保与模块通信的...
在易语言中,重定向输入输出是一项重要的功能,它允许程序员改变程序的标准输入、输出和错误流,使得数据可以从不同的来源读取或发送到不同的目的地。 在易语言中,输入输出通常涉及到三个基本流:标准输入(stdin...
需要注意的是,这些命令需要在运行BACnet服务端的设备上执行,并且设备必须配置正确以响应读属性请求。在使用过程中,可能会遇到网络通信、设备兼容性或属性访问权限等问题,这时需要结合BACnet协议标准和设备说明书...
`popen`会创建一个进程,连接到它的标准输入/输出,并返回一个指向`FILE`类型的指针,这样就可以像处理普通文件一样处理shell命令的输入和输出了。函数原型如下: ```c FILE *popen(const char *command, const ...
Shell提供了标准输入(stdin)、标准输出(stdout)和标准错误(stderr)的概念。使用`和`>`可以重定向输入和输出,`2>`用于专门重定向错误输出。例如,`command < input.txt > output.txt 2> error.log`会将input....
与之相反的,从流中读数据相当于读取指令的标准输出,指令的标准输入和调用 popen() 的进程相同。 在使用 popen() 函数时,需要注意以下几点: * 由于 popen() 函数返回的是一个标准 I/O 流,所以需要使用 fclose...
`echo`命令用于打印文本到标准输出设备。基本格式为:`echo [选项] 文本`。 - 示例:打印“Hello, world!”。 ```bash echo "Hello, world!" ``` **2. cal 命令** `cal`命令用于显示日历。基本格式为:`cal ...
- 管道符(|)允许将一个命令的标准输出作为另一个命令的输入。 十五、通配符 - 通配符(如*、?)用于模式匹配,可以简化搜索和操作文件的过程。 了解以上知识点后,用户可以进行更加高效和准确的Linux操作,利用...
- `-e`:命令执行失败时退出。 - `-f`:禁用文件名扩展。 - **示例**: ``` ash -c "echo 'Hello World'" ``` #### 三、banner:打印高质量标题 `banner`命令可以在终端中打印出高质量的ASCII艺术标题,常...
IBM AIX 操作系统下的通用命令 IBM AIX 操作系统下的常用命令是指在 IBM AIX 操作系统中使用的基本命令,...tee 命令用于读到标准输入并保存到特定文件,用户可以使用 tee 命令读取标准输入并保存到特定文件中。 ...
`start` 和 `@` 命令允许你在SQLPLUS环境中运行复杂的查询或批量操作,无需手动输入每一个命令。这对于执行大量的数据迁移、报表生成或日常维护任务特别有用。 #### 2. 编辑SQL语句 - **SQL> edit** - 使用此...
Linux中的标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)可以被重定向到文件或管道,实现数据流的灵活控制。例如,`command > output.txt`将命令的输出重定向到`output.txt`文件中。 #### 管道...
电子版的笔记可能还会包含对命令执行结果的截图或者对特定操作步骤的注释,这有助于快速回顾和学习。 除了命令行操作,Linux还支持通过图形用户界面(GUI)进行操作。不过,由于命令行在自动化和远程管理任务中的...
- **功能**:估计每个指定文件(或标准输入)所使用的磁盘空间。 - **常用选项**: - `-h`:以易读的 K/M/G 等单位表示。 **7. 列出目录内容:`ls`** - **命令格式**:`ls [选项]... [文件]...` - **功能**:...
- **描述**: 将标准输入中的字符串“foo”替换为“bar”。 #### 三、其他实用命令 **1. traceroute + ping** - **命令格式**: `mtr [目标地址]` - **示例**: `mtr google.com` - **描述**: 结合了traceroute和...
在命令执行过程中,bash(ksh)执行命令的过程包括:分析命令-变量求值-命令替代(``和$( ))-重定向-通配符展开-确定路径-执行命令。在这个过程中,我们可以使用重定向来改变命令的输入和输出。 最后,需要注意的是,...
(如果输入文件省略,将从标准输入读取) ③ awk 将读入的记录分割成字段,将第 1 个字段放入变量 $1 中,第 2 个字段放入 $2,以此类推。 $0 表示整条记录。字段分隔符使用 shell 环境变量 IFS 或由参数指定。 ④ ...