QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 654|回复: 2

类SHELL程序交互界面出现错误(请指教!)

[复制链接]
发表于 2004-6-9 07:29:55 | 显示全部楼层 |阅读模式
/*
这个程序是我看信号的时候写的,可是在提示语句后我输入CTRL+C(产生中段),结果出现了问题。。谢谢!!
*/
/*****************************************
signal.c ---used to test the catch a signal and
proceed with it.
Writer: Longwen     Date: 08/06/04
*****************************************/

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>

#define MAXLINE 20

static void sig_int(int);

int main(void)
{
  char buf[MAXLINE];
  pid_t pid;
  int status;

  /* void (*signal(int signo, void (*func)(int)))(int);
Return: the pre set of the signal,or SIG_ERR if error     */
  if(signal(SIGINT,sig_int)==SIG_ERR)
    {
      fprintf(stderr,"Signal error.\n");
      exit(1);
    }
  
  printf("NOW input a shell command(an empty line to quit):");
  while(fgets(buf,MAXLINE,stdin)!=NULL && buf[0]!='\n')
    {
      buf[strlen(buf)-1]='\0';

      if((pid=fork())<0)
        {
          fprintf(stderr,"ERROR in fork()\n");
          exit(2);
        }
  
      else if(pid==0)     /* child */
        {
          execlp(buf,buf,(char *) 0);
          fprintf(stderr,"couldn't execute %s\n",buf);
          exit(127);
        }

      /***************************************
      pid_t waitpid(pid_t pid,int *statlog, int options)
      options: 0,wnohang,wuntraced
      Return: the process ID ,-1 if error
         <sys/types.h>
         <sys/wait.h>
       ****************************************/
      if((pid=waitpid(pid,&status,0)) <0)    /* parent*/
        {
          fprintf(stderr,"waitpid error!\n");
          exit(12;
        }
      printf("NOW input a shell command(an empty line to quit):");
    }

  return 0;
}

void sig_int(int signo)
{
  printf("interrupt\nNOW input a shell command(an empty line to quit):");
}
 楼主| 发表于 2004-6-9 07:31:51 | 显示全部楼层
程序是在转路信号处理程序是出错的。。但我实在不懂。。
大家帮我看看
回复

使用道具 举报

发表于 2004-6-9 11:38:55 | 显示全部楼层
在信号处理最后加一个[code:1]  fflush(stdout);  [/code:1]试试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 04:36 , Processed in 0.044606 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表