当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (tty
帖子发表于 : 2013-03-17 10:04 

注册: 2013-03-03 10:45
帖子: 37
系统: ubuntu
送出感谢: 8
接收感谢: 0 次
运行的时候,报这个错:Program received signal SIGTTIN, Stopped (tty input).,求帮助,这是怎么回事???


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (
帖子发表于 : 2013-03-17 10:07 
头像

注册: 2008-08-13 8:48
帖子: 26391
地址: 东海硇州,一双管钥。
系统: Fundu i64
送出感谢: 50
接收感谢: 344
这不是后台么?直接kill -CONT PID啊。 :em20 :em20 :em20


_________________
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (
帖子发表于 : 2013-03-17 10:19 

注册: 2013-03-03 10:45
帖子: 37
系统: ubuntu
送出感谢: 8
接收感谢: 0 次
为什么会产生这样的结果啊?求解释!!!! :em20


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (
帖子发表于 : 2013-03-17 10:24 
头像

注册: 2008-08-13 8:48
帖子: 26391
地址: 东海硇州,一双管钥。
系统: Fundu i64
送出感谢: 50
接收感谢: 344
你不告诉我我怎么知道? :em01 :em01 :em01


_________________
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (
帖子发表于 : 2013-03-17 17:44 

注册: 2013-03-03 10:45
帖子: 37
系统: ubuntu
送出感谢: 8
接收感谢: 0 次
是不是贴代码啊

代码:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/wait.h>
//#define prompt "<<<<"
#define bufsize 50
#define size 50
char buffer[2048];
int version = 1;
char buf[bufsize];
char commandName[50];
char arg1[50];
char arg2[50];
char ptr[50];
//void parse(char *prompt,File *fp);
//void exec(char *commandName,char *arg1,char *arg2);
//void parse2(char *prompt,File *fp);
//void parr(char *prompt,File *fp);
void parse(FILE *fp);
void chaifen();
void exec(char *commandName,char *arg1,char *arg2);
void copy();
void copyOperation (int old,int new);
int main(){
       int i;
        for (i=0;i<50;i++)
   {
    commandName[i]='\0';
    arg1[i]='\0';
    arg2[i]='\0';
    ptr[i]='\0';
    }
   while( 1)
   {
       int i;
            if (getcwd(ptr,size)==NULL)
               printf("getcwd failed!\n");
            else
               printf("%s",ptr);
       //输出“$”提示符,等待用户输入命令行;
       printf("#   ");
       parse(stdin);// 命令行; //命令行字符串分析:目标得出待运行程
                     //序的文件名 commandName,arg1,arg2
       if (strcmp(buf,"logout\n")==0)
            {
           //     printf("logout2222");
      break;}
      
            else
               chaifen();

       //if(命令行==logout)
       //    exit( );

       //if((i=fork( )) ==0 )
       if ((i=fork())==0)
      exec(commandName,arg1,arg2);
       else
      sleep(22);
   }
    return 0;
}


//void parse(char *prompt,File *fp)
void parse(FILE *fp)//char *prompt,
{

   int i,j;
     fflush(stdin);
   fgets(buf, bufsize, stdin);
   printf("buf= %s",buf);
   //fputs(buf,stdout);//fputs(fgets(s,80,stdin),stdout);   检验是不是把buf的内容输出
   

}

void chaifen()
{
   
   int i,j;
  // for (i=0;i<50;i++)
   //{
    //commandName[i]='\0';
    //arg1[i]='\0';
    //arg2[i]='\0';
    //}
   //fflush(stdin);
   for (i=0;(buf[i]!=' ')&&(buf[i]!='\n');i++)
   {
     // printf("11111111\n");
      commandName[i]=buf[i];
     // flag=1;
   }
   // printf("2222\n");
   
   commandName[i]='\0';
  // printf("   CommandName=%s\n",commandName);
   j=0;
   for (i=i+1;(buf[i]!=' ')&&(buf[i]!='\n');i++)
   {
      arg1[j]=buf[i];
      j++;
   }
   arg1[j]='\0';
  // printf("   arg1=%s\n",arg1);
   j=0;
   for (i=i+1;(buf[i]!=' ')&&(buf[i]!='\n');i++)
   {
      arg2[j]=buf[i];
      j++;
   }
   arg2[j]='\0';
   //printf("   arg2=%s\n",arg2);

}


void exec(char * commandName,char *arg1,char *arg2 )
{
   if (  (strcmp(commandName,"copy")==0) &&(strcmp(arg1,"file1")==0)&&(strcmp(arg2,"file2")==0)  )
      copy();
  else
     printf("PID=%d!\n ",getpid());
}

void copy()
{
   int i = 0;
   int fdold,fdnew;
   fdold = open("file1", O_RDONLY);
   if(fdold == -1)
   {
     printf("can not open file %s\n","file1");
     exit(1);
   }
   fdnew = creat("file2", 0666);
   copyOperation (fdold, fdnew);
   printf ("This is process %d\n", getpid() );
   printf("Copy Done!From %s To %s\n", "file1","file2");
   exit(0);

}



void copyOperation (int old,int new)

{
   int count;

   while ((count=read(old,buffer,sizeof(buffer)))>0)
      write(new, buffer, count);
    return;
}

当输入:cd d f
之后就会报这个错
[img]/home/huang/图片/2013-03-17%2010:09:28的屏幕截图.png[/img]


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (
帖子发表于 : 2013-03-17 22:42 
头像

注册: 2008-08-13 8:48
帖子: 26391
地址: 东海硇州,一双管钥。
系统: Fundu i64
送出感谢: 50
接收感谢: 344
建议楼主还是自己调试一下,看问题出在哪里吧。 :em20 :em20 :em20


_________________
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (
帖子发表于 : 2013-03-18 9:05 
头像

注册: 2008-08-13 8:48
帖子: 26391
地址: 东海硇州,一双管钥。
系统: Fundu i64
送出感谢: 50
接收感谢: 344
好吧,昨晚回来晚了点,而且由于太过匆忙,代码未来得及看。趁着今天早上还有点时间,看了一眼,顺便加了点注释。 :em01 :em01 :em01
[c]
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/wait.h>
#define bufsize 50
#define size 50
char buffer[2048];
//int version = 1;
char buf[bufsize];
char commandName[50];
char arg1[50];
char arg2[50];
char ptr[50];

void parse(FILE *fp) //char *prompt,
{

//既然都有参数过来了,那就用嘛
fflush(fp);
//建议使用前还是置零一下buf
memset(buf , 0 , sizeof(buf));
fgets(buf, bufsize, fp);
printf("buf= %s", buf);

}

void chaifen()
{

int i, j;

//一些变量在使用前还是处理一下
memset(commandName , 0 , sizeof(commandName));
memset(arg1 , 0 , sizeof(arg1));
memset(arg2 , 0 , sizeof(arg2));

for(i = 0; (buf[i] != ' ') && (buf[i] != '\n'); i++) {
commandName[i] = buf[i];
}

//传入参数未经检查就乱赋值,不是一个好习惯,容易出现段错误
//虽然scanf可以格式化输入,只是没有数组越界检查不是很推荐
//假如用户的输入是双引号和单引号这些又如何拆分呢
//与其渴望用户遵循输入规则,不如程序员自己检查用户输入
commandName[i] = '\0';
j = 0;

for(i = i + 1; (buf[i] != ' ') && (buf[i] != '\n'); i++) {
arg1[j] = buf[i];
j++;
}

arg1[j] = '\0';
j = 0;

for(i = i + 1; (buf[i] != ' ') && (buf[i] != '\n'); i++) {
arg2[j] = buf[i];
j++;
}

arg2[j] = '\0';

}

void copyOperation(int old, int new)
{
int count;

while((count = read(old, buffer, sizeof(buffer))) > 0)
write(new, buffer, count);

return;
}

void copy()
{
int fdold, fdnew;
fdold = open("file1", O_RDONLY);

if(fdold == -1) {
printf("can not open file %s\n", "file1");
exit(1);
}

fdnew = creat("file2", 0666);
copyOperation(fdold, fdnew);
printf("This is process %d\n", getpid());
printf("Copy Done!From %s To %s\n", "file1", "file2");
exit(0);

}

void exec(char * commandName, char *arg1, char *arg2)
{
if((strcmp(commandName, "copy") == 0) && \
(strcmp(arg1, "file1") == 0) && (strcmp(arg2, "file2") == 0))
copy();
else
printf("PID=%d!\n", getpid());
}

int main()
{

// int i;
// for (i=0;i<50;i++)
// {
// commandName[i]='\0';
// arg1[i]='\0';
// arg2[i]='\0';
// ptr[i]='\0';
// }

//所以说memset可以减轻负担
memset(commandName , 0 , sizeof(commandName));

while(1) {
int i;

if(getcwd(ptr, size) == NULL)
printf("getcwd failed!\n");
else
printf("\e[32m%s\e[0m", ptr);

//输出“$”提示符,等待用户输入命令行;
printf("\e[31m#\e[0m");
parse(stdin);

if(strcmp(buf, "logout\n") == 0) {
break;
} else
chaifen();

if((i = fork()) == 0)
exec(commandName, arg1, arg2);
else
sleep(22);
}

return 0;
}


[/c]
为了方便阅读,代码的顺序调整了一下,还望楼主恕罪。
另,刚才调试了一下代码,表示仍旧没有出现楼主说到的情况,这点还望楼主能再调试一下,尽量重现之前的问题,毕竟没有重现可能性的bug算不上一个好bug。


_________________
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关



_________________
评价: 3.7% zero_hsy
 
页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译