如何 在unix里面用c实现一个读文件,还带上翻下翻和退出的程序。。

xxsteven 2003-02-27 01:23:21
如何 在unix里面用c实现一个读文件,还带上翻下翻和退出的程序。。
...全文
97 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fit2002 2003-03-25
  • 打赏
  • 举报
回复
!
fiverain 2003-03-25
  • 打赏
  • 举报
回复
use cursor

still bug

/*
浏览文本文件
============
*/
int wb_showfile(char *fname){
unsigned int line_num;
unsigned int line_len;
unsigned int line_p;
int i, key;
int nExitFlag;
char buff[1000];//for test line_len
char *lines[10000];// max lines
WINDOW *win;
FILE *fp;
noecho();
touchwin(stdscr);
win = newwin(24,80,0,0);
wrefresh(win);
if((fp = fopen (fname,"r")) == NULL){
mvwprintw(win,20,10,"Can not open file %s!",fname);
getch();
return 0;
}

mvwprintw(win,0,2," %s",fname);
mvwprintw(win,1,0,"----------------------------------------------");
mvwprintw(win,22,0,"----------------------------------------------");
mvwprintw(win,23,2," 3 --- pagedown 9 --- pageup 0 --- exit");
wrefresh(win);

line_num = 1;
while(fgets(buff,1000,fp) != NULL){
if(0 == line_num)
line_len = strlen(buff);
line_num ++;
}
for(i = 0; i < line_num; i ++)
lines[i] = (char *) malloc(line_len);

rewind(fp);
i = 0;
while(fgets(lines[i],line_len,fp) != NULL){
i ++;
}
fclose(fp);

line_p = 0;
do{
for(i = line_p; i < line_p + 20; i ++){
if( i > line_num - 1 )
strcpy(lines[i]," ");
mvwprintw(win,2 + i - line_p,1,"%4d> %s",i+1,lines[i]);
}
wrefresh(win);
do{
key = wgetch(win);
if(('9' == key) && (line_p >= 20))
line_p -= 20;
if(('3' == key) && (line_p <= (line_num - 20)))
line_p += 20;
if('0' == key)
nExitFlag = 1;
}while(key != '9' && key != '3' && key != '0');
}while (nExitFlag != 1);
for(i = 0; i < line_num; i ++)
free(lines[i]);
delwin(win);
refresh();
}
用户 昵称 2003-03-13
  • 打赏
  • 举报
回复
more
lanren 2003-03-12
  • 打赏
  • 举报
回复
做一个以行为单位的又向链表
apaches 2003-03-12
  • 打赏
  • 举报
回复
以前看过一个用cursor编的贼好的程序,就有点像windows下tc3.0的界面,很不错。
什么时候,我也来写写。
楼主去看看popen的帮助吧。
ari 2003-03-11
  • 打赏
  • 举报
回复
tingya(tingya)
air的方法只能实现下翻,不能实现上翻,即往回翻的功能。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
用管道(more/less各个系统MANPAGER不同)
FILE *fp = popen("less","w");

fgets()
fprintf(fp,"%s", linechr);
tingya 2003-03-05
  • 打赏
  • 举报
回复
air的方法只能实现下翻,不能实现上翻,即往回翻的功能。
unixzyy 2003-03-05
  • 打赏
  • 举报
回复
屏幕是25行就定义一个字符串数组char line[25][80],把文件读到这个数组中,然后显示即可。不过要控制上下活动页。我就是这么做的!
tingya 2003-03-04
  • 打赏
  • 举报
回复
我知道你的意思,你的实际上是unix下的编辑器,或者称之为阅读器,这需要使用unix下的curses库,我现在正在写这样的一个程序,作为我得即将出版的<<Unix下的curses库开发指南>>的附录程序。希望你到时候有用。
zico 2003-03-03
  • 打赏
  • 举报
回复
界面可以使用cursor库
zhongniu 2003-03-03
  • 打赏
  • 举报
回复
怎么感觉你跑到WINDOWS里了?来个控件(TEXTAREA)什么的!
UNIX里好象比较难控制
ari 2003-02-28
  • 打赏
  • 举报
回复
用管道
FILE *fp = popen("more","w");

fgets()
fprintf(fp,"%s", linechr);
懂了么?
ari 2003-02-28
  • 打赏
  • 举报
回复
man popen
多看看UNIX手册的,
这个问题用管道解决
earthwind 2003-02-28
  • 打赏
  • 举报
回复
ari(薛定锷)
我不明白,在讲讲。
popen 不是打开一个文件吗?你的more是什么意思?
hslinux 2003-02-27
  • 打赏
  • 举报
回复
linux不是开放源代码的吗?找more or page的源代码不就有了吗?
Nvram 2003-02-27
  • 打赏
  • 举报
回复
问问题要抓住要领。
你都做了那些尝试,遇到了什么具体问题?
xxsteven 2003-02-27
  • 打赏
  • 举报
回复
up!up
一、C语言自我YY1)、C语言是许多高级计算机语言的基础,学好C语言能更好的学习其他高级语言,为以后的学习打基础;往深学C语言的话那就是学到C在Linux里的应用,Linux十分强大。2)、C语言是一种计算机程序设计语言。具有高级语言的特点,又具有汇编语言的特点。C语言可作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。3)、应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。具体应用比如单片机以及嵌入式系统开发。4)、C语言是面向过程语言,C语言通过windows/linux平台下编译的,是直接运行在windows/linux平台下的,而XX始终是运行在他的虚拟机之上的;所以理论上C语言能做一些相对于比较底层的工作,像XX就不能编写Windows病毒。5)、如果要利用编程来做一些windows优化工作的话,建议还是利用C语言。C语言是目前世界上流行、使用最广泛的高级程序设计语言6、很多编译器,几乎所有操作系统Windows,Linux,Unix的大部分代码都是C,C在背后做了很多东西的,也许开发游戏用C++,安卓用XX更为合适,图形界面的用其他语言开发效率更高一些(因为他们封装了很多东西),但同样的原因导致略微接近底层的功能其他语言根本干不了!Windows的API都是按照C语言的格式给的,这也很能说明问题!嵌入式开发更是离不了C语言!纵观电脑发展几十年,C语无所不能呀!

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧