一个小程序求助(done)

sh/bash/dash/ksh/zsh等Shell脚本
回复
xbl
帖子: 139
注册时间: 2007-01-01 15:36
来自: 河北
送出感谢: 0
接收感谢: 0
联系:

一个小程序求助(done)

#1

帖子 xbl » 2007-05-08 21:17

/*@(#) more02.c
Created: 2007年05月08日 14时49分50秒 CST
Author: XBLANDY(YANGYANG) ()
E-mail: xbl1986@163.com

Description:
more02.c - version 0.2 of more
read and print 24 lines then pause for a few special commands
feature of version 0.2: reads form /dev/tty for commands
*/
#include<stdio.h>
/*#include<stdlib.h>*/
/*#include<string.h>*/
#define PAGELEN 24
#define LINELEN 512

void do_more(FILE *);
int see_more(FILE *);

int main(int ac,char *av[])
{
FILE *fp;
if(ac ==1)
do_more(stdin);
else
while( --ac )
if(fp = fopen(* (++av),"r")!=NULL)
{
do_more(fp);
fclose(fp);
}
else
exit(1);
return 0;
}

void do_more(FILE *fp)
/*
*read PAGELEN lines, then call see_more() for further instructions
* */
{
char line[LINELEN];
int num_of_lines = 0;
int see_more(FILE *),reply;
FILE *fp_tty;
fp_tty = fopen("/dev/tty","r");
if( fp_tty==NULL)
exit(1);
while(fgets(line,LINELEN,fp))
{
if(num_of_lines==PAGELEN)
{
reply = see_more(fp_tty);
if(reply == 0)
break;
num_of_lines -= reply;
}
if(fputs(line,stdout)== EOF)
exit(1);
num_of_lines++;
}
}

int see_more(FILE *cmd)
/*
*print message,wait for response ,return # of lines to advance
*q means no, space means yes ,CR means one line
* */
{
int c;
printf("\033[7mmore?\033[m");
while((c = getc(cmd))!= EOF)
{
if(c == 'q')
return 0;
if(c == ' ')
return PAGELEN;
if(c == '\n')
return 1;
}
return 0;
}
在用gcc more02 -o more02.c编译的时候出现警告
more02.c: In function ‘main’:
more02.c:27: warning: assignment makes pointer from integer without a cast
more02.c:33: warning: incompatible implicit declaration of built-in function ‘exit’
more02.c: In function ‘do_more’:
more02.c:48: warning: incompatible implicit declaration of built-in function ‘exit’
请指点一下 谢谢
上次由 xbl 在 2007-05-08 22:12,总共编辑 1 次。
xbl
帖子: 139
注册时间: 2007-01-01 15:36
来自: 河北
送出感谢: 0
接收感谢: 0
联系:

#2

帖子 xbl » 2007-05-08 22:12

问题似乎解决了
头文件的问题
书上的头文件包含的少了
stdlib.h加上就好了
回复

回到 “Shell脚本”