当前位置:  技术问答>linux和unix

求助一道linux C语言的错误问题

    来源: 互联网  发布时间:2016-09-05

    本文导语:  本帖最后由 zachary1984 于 2010-06-22 20:39:28 编辑 linux下编写C程序:在屏幕上显示提示符(prompt),接受从键盘输入,将从键盘输入的命令转化成(生成)新的进程,并且执行(运行)的这么一个程序。simplesh 如下: $ ./...

本帖最后由 zachary1984 于 2010-06-22 20:39:28 编辑
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 
#include 
#include 
#include 
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,"qn"))

printf("exitn");
return 0;

if ((pid = fork()) == 0)

 exec(cmd);
return 0;

else if (pid >= 1)

//等待子进程退出
  waitpid(-1, NULL,0);

else 

puts("error");
return -1; 
/* 错误处理*/


}

|


代码给你放上吧

你的这个程序不能处理函数,参看我给你写的那个流程,对参数的处理要用
getopt()。

#include 
#include 
#include 
#include 
int main()
{
    int pid;
    char cmd[100] = {0};
    char* ptr;
    while(1)
    {  
        ptr = cmd;

        printf("PROMPT>");

        gets(ptr);            //这个函数不让用会有警告,换成fgets就行了
        
        /*while((*(ptr++)=getchar())!='n');
        *ptr = 0;*/           //这两句执行完后cmd是空的,不信你puts下ptr

        if(!strcmp(cmd,"qn"))
        {  
            printf("exitn");
            return 0;
        } 
        
        if ((pid = fork()) == 0)
        {  
            if(execlp(ptr," ",(char*)0) == -1)  //不明白的直接谷歌exec函数族
                puts("execvp error!n");
            return 0;
        }  
        else 
            if (pid >= 1)
            {  
                waitpid(pid,NULL,0);
            }  
            else  
            {  
                puts("error");
                return -1;  
            }  
    } 
    return 0; 
}


|
没有exec(cmd)
不过可以用system(cmd)

不知道你编码的目地是什么
要说明一点的是,system其实就是fork+exec的封装
如果单纯是为了应用,不需要你再fork了

    
 
 

您可能感兴趣的文章:

  • 求助:一道简单的shell编程题目
  • 紧急求助——一道去年清华考研操作系统的unix编程题目
  • 新手求助一道编程题,关于文件操作的
  • 紧急求助——一道去年清华操作系统的unix编程题目
  • ~(取反)操作错误,求助!谢谢
  • 新手求助!编译libmad包时的错误!
  • 求助前辈们:solaris 10 x86 安装oracle 10g 错误
  • 新人求助 关于strcat的错误
  • 求助:第一次装apache+php,运行站点出现403错误!
  • Linux启动错误求助!
  • Linux安装错误求助!
  • 求助 !!ALSA声卡驱动错误!
  • 求助!请问VMware Workstation unrecoverable error,这个错误如何解决。
  • 求助一个编译中的/usr/bin/ld错误
  • 大侠,求助!!LINUX下TCP套接字编程中客户端出现段错误
  • 求助 程序链接错误
  • 菜鸟求助linux最最基本的HELLO函数错误
  • 求助:"错误:com/borland/jbcl/layout/XYLayout"应如何解决?
  • [紧急求助]socket在read时提示Connection reset by peer错误
  • **紧急求助:使用xmanager连接linux出现得错误*****
  • 求助,关于linux启动的错误(runlevel:9)
  • 【求助】急:Fedora 9 SELinux 配置错误导致启动不了怎么办?
  • gtk+ 和glade错误求助
  • make错误,求助。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求助,在linux下,c语言和汇编语言的接口是什么?
  • EJB2.0提供了许多新特性,包括EJB SQL语言,谁有EJB SQL语言的帮助文档,100分求助!
  • 求助:linux脚本语言写SQL语句
  • 在Linux的Eclipse中用C语言编程,求助
  • [求助]c语言有关?:的问题。
  • 求助VxWorks下C语言中如何嵌入汇编
  • 求助在linux下用c语言取得双网卡的网关地址
  • [求助]谁对c语言熟悉,一个问题
  • 求助linux下socket多线程编程的例子(C语言写的)
  • 高分求助:linux内核中的汇编语言和Dos或windows下的汇编是一样的吗,有这方面的书或资料可供学习吗,分不够可再加,决不食言
  • 紧急求助:如何在Linux下用C语言实现MD5/DES解密
  • C语言中执行shell脚本出错(菜鸟求助)
  • 求助:在 unix下用c语言编程,怎么实现ftp文件时的断点续传
  • 求助!linux下的c语言高手请进
  • 急,c语言高手求助
  • 求助,jsp中用到的html语言的含义
  • 求助:c语言socket文件传输中buffer缓存出现的问题
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题
  • 求助:信号 --13 进程中断
  • 求助,安装了红帽子后进不了
  • 新装linux求助


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3