c语言中用fork()和excel()实现控制台的指令
部分代码如下:在输入Q的时候打印goodbye退出,否则运行控制台指令或者运行文件范例:输入:R/bin/ls输出:1.out1.c输入:Rclock输出:(运行cloc...
部分代码如下:在输入Q的时候打印goodbye退出,否则运行控制台指令或者运行文件
范例:输入:R /bin/ls
输出:1.out 1.c
输入:R clock
输出:(运行clock)
输入:/bin/abc(不存在)
输出:abc未能找到
输入:Q
输出:Goodbye
返回
请问应该怎么做??
#include <stdio.h>
#include <fcntl.h> //For stat()
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h> //for fork(), wait()
int main()
{
char request;
char leftover[40]; //for cleaning up the left over inputs
//read user input
printf("YWIMC > ");
scanf("%c", &request);
while (request != 'Q'){
// Handle 'R' request
fgets(leftover, 40, stdin); //clean up left over to ready for
// next input
printf("YWIMC > ");
scanf("%c", &request);
}
printf("Goodbye!\n");
return 0;
}
是fork()和execl() 展开
范例:输入:R /bin/ls
输出:1.out 1.c
输入:R clock
输出:(运行clock)
输入:/bin/abc(不存在)
输出:abc未能找到
输入:Q
输出:Goodbye
返回
请问应该怎么做??
#include <stdio.h>
#include <fcntl.h> //For stat()
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h> //for fork(), wait()
int main()
{
char request;
char leftover[40]; //for cleaning up the left over inputs
//read user input
printf("YWIMC > ");
scanf("%c", &request);
while (request != 'Q'){
// Handle 'R' request
fgets(leftover, 40, stdin); //clean up left over to ready for
// next input
printf("YWIMC > ");
scanf("%c", &request);
}
printf("Goodbye!\n");
return 0;
}
是fork()和execl() 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏10(财富值+成长值)
1个回答
展开全部
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#define BUFFERSIZE 40
int main()
{
char request,ch;
char leftover[BUFFERSIZE];
int pid, status;
printf("Please Enter Command:\n");
scanf("%c", &request);
ch = getchar();
while(request != 'Q')
{
fgets(leftover, sizeof(leftover), stdin);
pid = fork();
if(pid > 0)
{
wait(&status);
printf("Please Enter Command:\n");
scanf("%c", &request);
ch = getchar();
}
else if (pid == 0)
{
if (execl("/bin/sh", "sh", "-c",leftover,(char *)0) == -1)
{
printf("%s",strerror(errno));
exit(-1);
}
exit(-1);
}
else
exit(-1);
}
printf("GoodBye!\n");
return 0;
}
在linux下vi编辑器下编写代码,gcc编译运行测试过,希望对你有帮助。上面的编程主要是利用了进程编程的一些知识,推荐看看《Unix环境高级编程》(APUE),相信会对编程有很大的提高,大家共同进步。
#include<unistd.h>
#include<fcntl.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#define BUFFERSIZE 40
int main()
{
char request,ch;
char leftover[BUFFERSIZE];
int pid, status;
printf("Please Enter Command:\n");
scanf("%c", &request);
ch = getchar();
while(request != 'Q')
{
fgets(leftover, sizeof(leftover), stdin);
pid = fork();
if(pid > 0)
{
wait(&status);
printf("Please Enter Command:\n");
scanf("%c", &request);
ch = getchar();
}
else if (pid == 0)
{
if (execl("/bin/sh", "sh", "-c",leftover,(char *)0) == -1)
{
printf("%s",strerror(errno));
exit(-1);
}
exit(-1);
}
else
exit(-1);
}
printf("GoodBye!\n");
return 0;
}
在linux下vi编辑器下编写代码,gcc编译运行测试过,希望对你有帮助。上面的编程主要是利用了进程编程的一些知识,推荐看看《Unix环境高级编程》(APUE),相信会对编程有很大的提高,大家共同进步。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询