求助一道linux C语言的错误问题
linux下编写C程序:在屏幕上显示提示符(prompt),接受从键盘输入,将从键盘输入的命令转化成(生成)新的进程,并且执行(运行)的这么一个程序。simplesh
如下:
$ ./simplesh
PROMPT>
PROMPT> date
Wed May 27 0:30:10 JST 2009
PROMPT> ls
…
要点:
1.根据下面所示,使用fork,在子进程使用exec系统调用,将子进程置换成输入的命令的进程
int pid;
if ((pid = fork()) == 0) {
/* 子进程的处理*/
} else if (pid >= 1) {
/* 父进程的处理*/
} else {
/* 错误处理*/
}
---------------------------------------------------------
下面是朋友写的代码,但是编译出错,请高手帮忙看一下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
int pid;
char cmd[100] = {0};
char* ptr;
while(1)
{
ptr = cmd;
//输入prompt
printf("PROMPT>");
//判断是否输入空格
while((*(ptr++)=getchar())!='\n');
*ptr = 0;
//输入q,退出
if(!strcmp(cmd,"q\n"))
{
printf("exit\n");
return 0;
}
if ((pid = fork()) == 0)
{
exec(cmd);
return 0;
}
else if (pid >= 1)
{
//等待子进程退出
waitpid(-1, NULL,0);
}
else
{
puts("error");
return -1;
/* 错误处理*/
}
}
}
如下:
$ ./simplesh
PROMPT>
PROMPT> date
Wed May 27 0:30:10 JST 2009
PROMPT> ls
…
要点:
1.根据下面所示,使用fork,在子进程使用exec系统调用,将子进程置换成输入的命令的进程
int pid;
if ((pid = fork()) == 0) {
/* 子进程的处理*/
} else if (pid >= 1) {
/* 父进程的处理*/
} else {
/* 错误处理*/
}
---------------------------------------------------------
下面是朋友写的代码,但是编译出错,请高手帮忙看一下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
int pid;
char cmd[100] = {0};
char* ptr;
while(1)
{
ptr = cmd;
//输入prompt
printf("PROMPT>");
//判断是否输入空格
while((*(ptr++)=getchar())!='\n');
*ptr = 0;
//输入q,退出
if(!strcmp(cmd,"q\n"))
{
printf("exit\n");
return 0;
}
if ((pid = fork()) == 0)
{
exec(cmd);
return 0;
}
else if (pid >= 1)
{
//等待子进程退出
waitpid(-1, NULL,0);
}
else
{
puts("error");
return -1;
/* 错误处理*/
}
}
}
...全文
相关推荐
linux c语言错误处理
六、文件操作错误在Linux环境下,文件操作是C语言编程的重要部分。文件打开失败、读写错误、文件未找到等问题需特别关注。
基于C语言中段错误的问题详解
对于多线程程序,使用互斥锁等同步机制来保护共享资源,防止数据竞争导致的错误。通过理解内存管理和指针操作的基本原理,开发者可以更有效地识别和解决C语言中的段错误问题。
Linux C语言 内存越界问题总结
Linux C语言内存越界问题总结一、内存越界的定义和分类内存越界是指在计算机程序中,因为访问或修改了超出变量或数组的边界而导致的错误。内存越界可能会导致程序崩溃、内存泄漏、数据丢失等严重问题。
Linux系统下C语言gets函数出现警告问题的解决方法
"Linux系统下C语言使用gets函数时遇到警告,解决方案是改用其他安全的输入函数"在Linux系统中编程,特别是在C语言环境中,安全性和稳健性是至关重要的。当我们遇到像`gets()`这样的函
LINUX C语言 DNS
LINUX C语言 DNS本文使用的glibc版本是2.19资源下载地址1.GNU LIB C 手册[http://ftp.gnu.org/old-gnu/Manuals/glibc-2.2.3/pdf/libc.pdf]其实这算是LINUX下C语言的库函数手册,大部分函数的简单说明都能在里面查到。另外,如果你的环境是在liunux下,会有更简单的办法,就是man命令请看后面的内容。另外,这个版本的


