从标准输入读命令并执行

输入重定向在运维中的应用与示例 输入重定向是指将命令的输入来源从默认的标准输入(通常是键盘)重定向到一个文件或其他输入流。通过输入重定向,可以让程序从文件中读取数据,而不是等待用户手动输入。 阅读详情

从标准输入读命令并执行

<span style="font-size:14px;">#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<string.h>
#define MAXSIZE 4096
int main()
{
	char buf[MAXSIZE];
	pid_t pid;
	int status;

	printf("%% ");
	while(fgets(buf,MAXSIZE,stdin) != NULL)
	{
		if(buf[strlen(buf) - 1] == '\n')
			buf[strlen(buf)-1] = 0;
		if((pid = fork() ) < 0)
		{
			printf("fork error\n");
			exit(1);
		}
		else if(pid == 0)
		{
			execlp(buf,buf,(char*)0);
			printf("couldn't execute: %s\n",buf);
			exit(127);
		}
		if((pid = waitpid(pid,&status,0)) < 0)
		{
			printf("waitpid error\n");
			exit(1);
		}
		printf("%% ");
	}
	exit(0);
}</span>

1. 标准 I/O函数fgets用于从终端读入一行数据
2. 由于execlp函数要求参数以null结尾,所以用strlen函数求出buf长度用于替换\n为null
3. fork函数用于创建一个新的进程。fork函数向父进程返回新子进程的进程ID,对子进程则返回0。fork被调用一次但返回两次
4. execlp用于执行读入的命令。
5. waitpid函数返回子进程的终止状态(status变量)
Python学习笔记 - 探索读取输入和写入输出 在本教程中,我们深入探讨了Python中与输入和输出相关的基本操作及其高级应用。掌握这些内容对于编写高效、用户友好的程序至关重要。通过本教程的学习,你应该已经掌握了如何有效地读取用户输入,并将结果通过多种方式输出到控制台。这些技能不仅在命令行程序中至关重要,而且在更复杂的应用中,如图形界面开发、文件处理、网络编程等,都是不可或缺的基本技能。在实际编程中,这些输入输出操作可能需要结合更多的逻辑处理、异常处理,以及与其他功能模块的集成。建议你在掌握这些基础知识后,通过实战项目来进一步巩固和扩展你的技能。 阅读详情

相关推荐

VS Code 配置 LaTeX 写作环境完全指南

本文详细介绍了如何在 VS Code 中配置 LaTeX 写作环境,涵盖了从安装必备组件到高级功能的全面指南。首先,用户需要安装 LaTeX 发行版(如 TeX Live 或 MiKTeX)和 VS Code 插件(如 LaTeX Workshop)。接着,通过修改 settings.json 和 keybindings.json 文件,用户可以自定义编译、查看快捷键等基础配置。文章还提供了高效写作技巧,如使用代码片段和多文件项目管理,并介绍了高级功能如反向同步、公式预览和参考文献管理。此外,针对常见问题(

weixin_70043030的博客 1984

python从标准输入读取数据_在PYTHON中如何从标准输入读取内容stdin

Python有几种方法来读取标准输入的数据。1、sys.stdinsys.stdin提供了read()和readline()函数,如果想按一行行来读取,可以考虑使用它:import sysline = sys.stdin.readline()while line:print line,line = sys.stdin.readline()注意:如果没有数据,io会被堵塞,所以可以对标准输入做数据检...

weixin_39747807的博客 2333

2022-04-06 RK3566 上调试百兆以太网卡YT8512C 调试记录

一、原理图 二、dts &gmac1_clkin{ clock-frequency = <50000000>; status = "okay"; }; &gmac1 { phy-mode = "rmii"; clock_in_out = "input"; snps,reset-gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>; snps,reset-active-low; sn...

海月汐辰 1万+

fgets(buf,sizeof(s),stdin) ,getline(cin,str)

1、fgets(buf, n, file) 函数功能:从 目标文件流 file 中读取 n-1 个字符,放入以 buf 起始地址的内存空间中。 楼主的函数调用是这个意思: 首先,s 肯定是一个字符数组。 该调用从 标准输入流 stdin (也就是键盘输入)读入 s 数组的大小(sizeof(s))再减 1 的长度的字符到 buf 所指的内存空间中(前提是buf已经申请好空间了) 2、 int...

哆啦A梦~~ 5601

在Kintex-7 FPGA上实现皮秒级时间测量:手把手教你搭建CARRY4进位链TDC(附源码与约束)

本文详细介绍了在Kintex-7 FPGA上利用CARRY4进位链实现皮秒级时间测量(TDC)的完整方案。从CARRY4的物理特性分析到硬件架构设计,再到校准方法与精度提升技巧,手把手教你构建测量精度达53ps的TDC系统,并附源码与约束文件,助力激光雷达、高能物理等精密计时应用开发。

weixin_42550052的博客 444

LabVIEW新手必看:5个工业自动化实战项目从零搭建(附完整代码)

本文为LabVIEW新手提供了5个从零开始的工业自动化实战项目指南,涵盖数据采集、状态机控制、PID闭环、振动监测及多站协同监控。通过详细的架构解析和关键代码片段,帮助读者快速掌握LabVIEW图形化编程的核心逻辑与工程化思维,并附完整代码实现。

agile9scrum的博客 1072

fgets()用法笔记

为了避免缓冲区溢出,从终端读取输入时应当用fgets()代替gets()函数。但是这也将带来一个问题,因为fgets()的调用格式是: fgets (buf, MAX, fp)fgets (buf, MAX, stdin) buf是一个char数组的名称,MAX是字符串的最大长度,fp是FILE指针。fgets()函数读取到它所遇到的第一个换行符的后面,或者读取比字符串的最大长...

weixin_34049032的博客 1289

pytorch-cifar100学习资料汇总 - 基于PyTorch的CIFAR-100图像分类实践

pytorch-cifar100是一个基于PyTorch实现CIFAR-100数据集图像分类的开源项目。该项目实现了多种经典的深度学习网络模型,如ResNet、DenseNet、VGG等,为开发者提供了在CIFAR-100数据集上进行图像分类实验的代码范例。pytorch-cifar100项目为我们提供了在CIFAR-100数据集上进行图像分类实验的完整代码实现。无论你是想要学习PyTorch的使用,还是研究不同网络模型在CIFAR-100上的表现,这个项目都是一个很好的起点。

helloaiworld的博客 1123

c语言简易计算器报告,c语言版简易计算器

#include#include#define MAXSIZE 100#define NUMBER 1#define SYMBOL 0#define EXIST 1#define UNEXIST 0//数字栈typedef struct numberNode{double data;struct numberNode *next;}stackNode_number;//符号栈typedef str...

weixin_35834271的博客 385

【DRAM存储器五十一】LPDDR5介绍--DFE与Pre-Emphasis

简述LPDDR5的DFE和预加重应用设置

highman110的博客 705

深入剖析RDMA Netlink:Linux内核中高效通信的基石

RDMA Netlink:Linux内核中高效通信控制的核心机制 RDMA技术通过绕过内核实现高速数据传输,但其管理控制仍需内核参与。drivers/infiniband/core/netlink.c文件作为RDMA子系统的心脏,构建了用户空间与内核间的高效通信桥梁。该模块采用模块化客户端架构,通过全局数组管理不同类型的RDMA功能,如设备管理、连接服务和链路层操作。从最初的全局锁到细粒度读写锁的演进,展现了Linux内核追求高性能的持续优化。同时,通过条件编译支持新旧内核版本和网络命名空间,体现了稳定性与

数字人生 238

从标准输入中读命令并执行

#include #include #include #include #define MAXLINE 1024 int main(void) { char buf[MAXLINE]; pid_t pid; int status; printf("%%"); while(fgets(buf,MAXLINE,stdin)!=NULL) { if(buf[strlen(buf)-1

沧海一粟的专栏 769

一、C++反作弊对抗实战 (基础篇 —— 2.注册表注入DLL)

在Windows NT/XP操作系统中,当需要加载user32.dll的程序启动时,user32.dll会加载注册表键HLM\Software\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_dlls下面列出的所有模块。

Koma的主页 1098

UNIX环境高级编程 1_7 从标准输入读命令并执行

源码 #include"apue.h" #include<sys/wait.h> int main(void) { char buf[MAXLINE]; pid_t pid; int status; printf("%% "); while(fgets(buf,MAXLINE,stdin) != NULL) { ...

jdwjdw4938的博客 192

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

1.7从标准输入读命令并执行

类似于之前的,把代码抄一遍并运行 一脸懵逼,似乎是通过fork()获取进程pid,pid必须大于0,waitpid()返回的值也不能>=0, 也不知道在终端的%后面写什么。 看看书上怎么写的。如果懂了就学到东西了。 发现抄错了,。。。。 重新抄,重新运行。 看了书上的解释,大概明白了,试着阐述一下。 1,通过%后输入的内容,获取buffer 2,fork()一次执行,二次返回。 执行后对调用进程(父进程)产生副本(子进程), 返回是对父进程返回子进程的id(非负),对子进程返回0 3,在这个程序里

coder 189

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

1-7从标准输入读命令并执行

#include <unistd.h> #include <stdio.h> #include<string.h> #include<stdlib.h> #include<apue.h> #include <wait.h> int main() { char buf[MAXLINE]; pid_t pid; int status; printf("%% "); while(fgets(bu

放浪曲蘖的博客 156

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

UNIX环境高级编程笔记(3)- 从标准输入读命令并执行

目录 文章目录 前言 一、fork()函数 二、waitpid函数 三、exec函数 四、代码例程 1.获取进程ID 2.从标准输入读命令并执行 五、代码说明 总结 前言 本文章主要介绍一种从标准输入读命令并执行的代码,以及对需要用到的函数fork、exec、waitpid等函数接口的介绍。 一、fork()函数 一个进程可以调用fork函数创建一个新进程。函数接口为: #include<unistd.h> pid_t fork(void)...

lipengcheng_111的博客 447

1.5 从标准输入读命令并执行

proc/shell1.c 1 #include "apue.h" 2 #include <sys/wait.h> 3 int 4 main(void) 5 { 6 char buf[MAXLINE]; /* from apue.h */ 7 pid_t pid; 8 int status; ...

weixin_30530939的博客 138

1.8 从标准输入读命令并执行2

int execlp(const char *file, const char *arg, ...); 函数说明: execlp()会从PATH环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。如果用常数0来表示一个空指针,则必须将它强制转换为一个字符指针,否...

weixin_30617797的博客 78

APUE 1-10 从标准输入读命令并执行

1-10.c #include "apue.h" #include "my_err.h" #include static void sig_int(int); int main() { char buf[MAXLINE]; pid_t pid; int status; if (signal(SIGINT, sig_int) == SIG_ERR) err_sys("sign

2puT 469

Linux/Unix C, 基础学习《Unix环境高级编程》 从标准输入读命令并执行

《Unix环境高级编程第二版》 程序块1.7 [code="c"] include "apue.h" #include #include "lib/error.c" int main(void) { char buf[MAXLINE]; /* from apue.h */ pid_t pid; int ...

beattwo的专栏 151

APUE 1-7 从标准输入读命令并执行

#include "apue.h" #include "my_err.h" #include int main() { char buf[MAXLINE]; pid_t pid; int status; printf("%% "); while(fgets(buf, MAXLINE, stdin) != NULL) { if (buf[strlen(buf) - 1] == '

2puT 365

Linux系统编程——pipe管道练习_父子进程完成ps_aux_grep_bash

父子进程完成ps_aux_grep_bash 用管道完成,执行ps aux | grep bash命令,简单的说就是ps aux本来是输出到标准输出的,现在用dup2重定向到管道的写端,所以grep bash获取前方传来的数据,其标准输入得生重定向到管道的读端。 原理 1 创建管道 2 创建子进程fork 3 在父进程中关闭读端fd[0] 4 在子进程中关闭写端fd[1] 5 在父进程中将标准输出重定向到管道的写端 6 在子进程中将标准输入重写向到管道的读端 7 在父进程中调用execl函数执行ps au

mirana的专栏 447
上一篇: 将标准输入复制到标准输出
下一篇: 图像的直方图
cassiePython
博客等级 码龄12年 303粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值