我的大明龙权官网安装完以后登陆显示dp.exe应用程序错误,重...

[精华] 如何在终端上不出现login,直接执行应用程序。 - ChinaUnix.net
[精华] 如何在终端上不出现login,直接执行应用程序。
http://www.chinaunix.net 作者:&&发表于: 07:00:55
例如:我的终端是tty21a&,终端一开机,自动登录到我的应用程序画面。而不出现login&
& 回复于: 10:12:08
太难了,已经有几十个人提问,至今无人回答
& 回复于: 11:03:11
可以的,只是要固定终端口子.我做过,需要源程序吗?
& 回复于: 11:11:40
是吗?有给我一个啊。bby_
& 回复于: 11:53:17
太好了,发我一份吧!!!!!
& 回复于: 12:31:39
[这个贴子最后由edwardcj在&&12:33pm&编辑]没这么复杂吧,改一下inittab就可以了。21a:23:respawn:/path/your_program&tty21a&m
& 回复于: 14:21:22
& 回复于: 14:33:57
引用:下面引用由[u]edwardcj[/u]在&&12:31pm&发表的内容:没这么复杂吧,改一下inittab就可以了。21a:23:respawn:/path/your_program&tty21a&m不行,终端都死掉了
& 回复于: 14:46:30
引用:下面引用由[u]fdlj53u[/u]在&&11:03am&发表的内容:可以的,只是要固定终端口子.我做过,需要源程序吗?等待你的源程序
& 回复于: 15:59:51
我也曾经修改过/etc/inittab文件,总是以失败告终,有哪位对此有经验的侠客请告之!
& 回复于: 16:02:17
俺也想知道!!!!
& 回复于: 16:35:54
& 回复于: 16:41:43
[这个贴子最后由fdlj53u在&&04:44pm&编辑]我给出一个示例文件,希望大家有所帮助.文件一:tty_mng.c(用来设置终端是直接登录还是出现login,root权限使用)---------------------------------------#include&&stdio.h&#include&&string.h&main(argc,argv)int&argc;char&*argv[];{int&i;printf(&Make&tty&to&&'face'&or&'login'...\n&);printf(&USAGE:`tty_mng&&face&&env&tty`\n&);printf(&&&&or&`tty_mng&&login&&&&&tty`\n\n&);if(argc&3)&{&&&printf(&Too&few¶meters\n&);&&&exit(1);}if(strcmp(argv[1],&login&)==0)&{&&&&&&&for(i=2;i&argc;i++)&login(argv);}else&if(strcmp(argv[1],&face&)==0)&{&&&&&&&for(i=3;i&argc;i++)&face(argv[2],argv);}system(&/bin/telinit&q&);exit(i);}login(tty)char&*tty;{int&&ignore;char&tmp[100];char&tmp1[100];char&s[512+1];int&&i;int&&j;FILE&*f1,*f2;sprintf(tmp,&/dev/%s&,tty);sprintf(tmp1,&respawn:/etc/getty&%s&,tty);if(access(tmp,0)==(-1))&{&&&&&printf(&Error&tty&[%s],ignored\n&,tmp);&&&&&return(-1);}f1=fopen(&/etc/inittab&,&r&);if(f1==NULL){&&&&&perror(&/etc/inittab&);&&&&&exit(1);}f2=fopen(&/tmp/inittab&,&w&);if(f2==NULL){&&&&&perror(&/tmp/inittab&);&&&&&fclose(f1);&&&&&exit(1);}ignore=0;while(!feof(f1)){&&&&&s[0]='\0';&&&&&fgets(s,512,f1);&&&&&if(s[0]=='\0')&break;&&&&&if((strstr(s,tmp))==NULL||strstr(s,&/usr/bin/face&)==NULL){&&&&&&&&&&&&&fprintf(f2,&%s&,s);&&&&&&&&&&&&&if(s[0]!='#'&&strstr(s,tmp1)!=NULL)&ignore=1;&&&&&}&&&&&else&printf(&#%s&,s);}j=strlen(tty);if(!ignore)fprintf(f2,&%s:23:respawn:/etc/getty&%s&%s\n&,&tty[3],tty,j==5?&sc_m&:&m&);fclose(f1);fclose(f2);if(ignore)&printf(&login&%s&ignored\n&,tty);else&printf(&login&%s&OK\n&,tty);system(&cp&/tmp/inittab&/etc/inittab&);}face(env,tty)char&*env,*tty;{int&&ignore=0;char&tmp[100];char&tmp1[100];char&tmp2[100];char&s[512+1];int&&i;FILE&*f1,*f2;sprintf(tmp,&/dev/%s&,tty);if(access(tmp,0)==(-1))&{&&&&&printf(&Error&tty&[%s],ignored\n&,tmp);&&&&&return(-1);}sprintf(tmp1,&respawn:/usr/bin/face&);sprintf(tmp2,&/dev/%s&,tty);sprintf(tmp,&/etc/getty&%s&,tty);f1=fopen(&/etc/inittab&,&r&);if(f1==NULL){&&&&&perror(&/etc/inittab&);&&&&&exit(1);}f2=fopen(&/tmp/inittab&,&w&);if(f2==NULL){&&&&&perror(&/tmp/inittab&);&&&&&fclose(f1);&&&&&exit(1);}ignore=0;while(!feof(f1)){&&&&&s[0]='\0';&&&&&fgets(s,512,f1);&&&&&if(s[0]=='\0')&break;&&&&&if((strstr(s,tmp))==NULL)&{&&&&&&&&fprintf(f2,&%s&,s);&&&&&&&&if(s[0]!='#'&&strstr(s,tmp2)!=NULL&&strstr(s,tmp1)!=NULL)&ignore=1;&&&&&}&&&&&else&printf(&#%s&,s);}if(!ignore)&fprintf(f2,&%s:23:respawn:/usr/bin/face&%s&&;/dev/%s&2&;/dev/%s&&/dev/%s\n&,&tty[3],env,tty,tty,tty);fclose(f1);fclose(f2);if(ignore)&printf(&face&%s&ignored\n&,tty);else&printf(&face&%s&OK\n&,tty);system(&cp&/tmp/inittab&/etc/inittab&);}---------------------------------------文件2:face.c&(一个屏幕显示的操作界面,修改一下可以用的)---------------------#include&&curses.h&#include&&string.h&#include&&time.h&#include&&ctype.h&#include&&stdio.h&#include&&signal.h&#define&&UP&&&&&11201#define&&LEFT&&&11202&#define&&DOWN&&&11203#define&&RIGHT&&11204#define&&F1&&&11205#define&&F2&&&11206#define&&F3&&&11207#define&&F4&&&11208#define&&LINE&4#define&&COL&&5static&char&env[100][100];char&pwd[100];char&tty[100];int&&root=0;int&&limit=10;int&&ACTIVE=1;int&&mod;char&TERM[20];char&TERMTYPE[20];int&&CLOCK();int&&tick=0;int&&lang=0;&&&&&/*&0-chinese&&1-&english&&2-&other&&**/char&*cmd[LINE*COL]={NULL,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/aaa.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/bbb.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/ccc.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/ddd.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/eee.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/fff.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/ggg.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/hhh.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/iii.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/jjj.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/kkk.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/lll.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/mmm.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&su&-&history&,&&&&&&&&&&&&&&&&&&&&&&exec&su&-&test&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/ffda.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/tt.exe&,&&&&&&&&&&&&&&&&&&&&&&exec&../bin/tttt.exe&,&&&&&&&&&&&&&&&&&&&&&&tput&clear;echo&Type&EXIT&to&return...;/bin/sh&};char&*func[LINE*COL+1]={&系统登录&,&&&&&&&&&&&&&&&&&&&&&&&⒈AAAAAAAA&,&&&&&&&&&&&&&&&&&&&&&&&⒉BBBBBBBB&,&&&&&&&&&&&&&&&&&&&&&&&⒊CCCCCCCC&,&&&&&&&&&&&&&&&&&&&&&&&⒋DDDDDDDD&,&&&&&&&&&&&&&&&&&&&&&&&⒌EEEEEEEE&,&&&&&&&&&&&&&&&&&&&&&&&⒍FFFFFFFF&,&&&&&&&&&&&&&&&&&&&&&&&⒎GGGGGGGG&,&&&&&&&&&&&&&&&&&&&&&&&⒏HHHHHHHH&,&&&&&&&&&&&&&&&&&&&&&&&⒐IIIIIIII&,&&&&&&&&&&&&&&&&&&&&&&&⒑JJJJJJJJ&,&&&&&&&&&&&&&&&&&&&&&&&⒒KKKKKKKK&,&&&&&&&&&&&&&&&&&&&&&&&⒓LLLLLLLL&,&&&&&&&&&&&&&&&&&&&&&&&⒔MMMMMMMM&,&&&&&&&&&&&&&&&&&&&&&&&⒕NNNNNNNN&,&&&&&&&&&&&&&&&&&&&&&&&⒖系统练习&,&&&&&&&&&&&&&&&&&&&&&&&⒗PPPPPPPP&,&&&&&&&&&&&&&&&&&&&&&&&⒘系统维护&,&&&&&&&&&&&&&&&&&&&&&&&⒙杂项功能&,&&&&&&&&&&&&&&&&&&&&&&&UNIX\nS&H&E&L&L&,&&&&&&&&&&&&&&&&&&&&&&NULL};int&a[LINE*COL]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};int&x[COL]=&{6,20,34,48,62};int&y[LINE]={3&,&7,11,15};main(argc,argv)int&argc;char&*argv[];{int&max,i,k,org;char&comd[120];int&key;int&j;FILE&*fpt;char&pass[100];char&buff[10],b_p=0;putenv(&TERM=vt100&);putenv(&PRN=FILE&);set_env(argv[1]);&chdir(getenv(&PWD&));getcwd(pwd);sprintf(TERM,&%.18s&,getenv(&TERM&));sprintf(TERMTYPE,&%.18s&,getenv(&TERMTYPE&));sprintf(comd,&grep&'^%s'&/etc/passwd&|&cut&-d':'&-f3&,getenv(&LOGNAME&));fpt=popen(comd,&r&);fscanf(fpt,&%d&,&j);pclose(fpt);setuid(j);umask(0);for(max=0;func[max]!=(char&*)NULL;max++)&;form_scr();refresh();k=0;a[k]=2;org=k;refresh();for(;;org=k){&&&&draw(k);&&&&refresh();&&&&if(!ACTIVE&&tick&;120)&alarm(0);&&&&else&alarm(2);&&&&key=wc_getch(stdscr);&&&&alarm(0);&&&&if(key!=(-1))&tick=0;&&&&else&{&&&&&&&continue;&&&&}&&&&switch(key){&&&&&&&&case&LEFT:do&k-=LINE;while(a[k]==0&&k&;=0);&&&&&&&&&&&&&&&&&&if(k&0)&k+=LINE;&&&&&&&&&&&&&&&&&&if(a[k]==0)&k=org;&&&&&&&&&&&&&&&&&&a[org]=1;&&&&&&&&&&&&&&&&&&a[k]=2;&&&&&&&&&&&&&&&&&&break;&&&&&&&case&RIGHT:&&&&&&&&case&&&&9:do&k+=LINE;&while(a[k]==0&&k&max);&&&&&&&&&&&&&&&&&&if(k&;=max)&k-=LINE;&&&&&&&&&&&&&&&&&&if(a[k]==0)&k=org;&&&&&&&&&&&&&&&&&&a[org]=1;&&&&&&&&&&&&&&&&&&a[k]=2;&&&&&&&&&&&&&&&&&&break;&&&&&&&&case&&&UP:do&k--;while(a[k]==0&&k&;=0);&&&&&&&&&&&&&&&&&&if(k&0)&k++;&&&&&&&&&&&&&&&&&&if(a[k]==0)&k=org;&&&&&&&&&&&&&&&&&&a[org]=1;&&&&&&&&&&&&&&&&&&a[k]=2;&&&&&&&&&&&&&&&&&&break;&&&&&&&&case&DOWN:do&k++;while(a[k]==0&&k&max);&&&&&&&&&&&&&&&&&&if(k&;=max)&k--;&&&&&&&&&&&&&&&&&&if(a[k]==0)&k=org;&&&&&&&&&&&&&&&&&&a[org]=1;&&&&&&&&&&&&&&&&&&a[k]=2;&&&&&&&&&&&&&&&&&&break;&&&&&&&case&'0'&&:&&&&&&&case&'1'&&:&&&&&&&case&'2'&&:&&&&&&&case&'3'&&:&&&&&&&case&'4'&&:&&&&&&&case&'5'&&:&&&&&&&case&'6'&&:&&&&&&&case&'7'&&:&&&&&&&case&'8'&&:&&&&&&&case&'9'&&:buff[b_p++]=key;&&&&&&&&&&&&&&&&&&buff[b_p]='\0';&&&&&&&&&&&&&&&&&&org=k;&&&&&&&&&&&&&&&&&&k=atoi(buff);&&&&&&&&&&&&&&&&&&if(k&=0||k&;18)&{&&&&&&&&&&&&&&&&&&&&&&buff[0]=key;&&&&&&&&&&&&&&&&&&&&&&b_p=1;&&&&&&&&&&&&&&&&&&&&&&buff[1]='\0';&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&k=atoi(buff);&&&&&&&&&&&&&&&&&&if(!a[k])&{&&&&&&&&&&&&&&&&&&&&&&if(key=='1')&;else&b_p=0;&&&&&&&&&&&&&&&&&&&&&&k=org;&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&else&{&&&&&&&&&&&&&&&&&&&&&&a[org]=1;&&&&&&&&&&&&&&&&&&&&&&a[k]=2;&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&break;&&&&&&&case&10&&&:&&&&&&&case&13&&&:&&&&&&&&&&&&&&&&&&if(cmd[k]!=NULL){&&&&&&&&&&&&&&&&&&&&&&&endwin();&&&&&&&&&&&&&&&&&&&&&&&sprintf(comd,&%s&,cmd[k]);&&&&&&&&&&&&&&&&&&&&&&&system(comd);&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&break;&&&&&&&case&'x'&&:&&&&&&&case&24&&&:&&&&&&&case&27&&&:&&&&&&&case&F4&&&:endwin();exit(0);&&&&&&&case&11&&&:endwin();form_scr();break;&&&&&&&default&&&:break;&&&&}&&&&draw(org);}endwin();}draw(i)&int&i;&{&int&attr;switch(a){&&&&&case&0:attr=A_DIM;break;&&&&&case&1:attr=A_BOLD;break;&&&&&case&2:attr=A_BOLD|A_REVERSE;&break;}attron(attr);BOX(y[i%LINE],x[i/LINE],func);attroff(attr);refresh();return(a);}BOX(by,bx,str)int&&&by,bx;char&&*str;{char&*tmp,tmp1[100],buff[1024];int&&k,lines=0;tmp=str;do{&&tmp=strchr(tmp+1,'\n');&&if(tmp!=NULL)&lines++;}while(tmp!=NULL);lines=3-lines;sprintf(tmp1,&%s&,str);do{&&tmp=strchr(tmp1,'\n');&&if(tmp==NULL)&sprintf(buff,&%s&,tmp1);&&else&{&&&&&(*tmp)='\0';&&&&&sprintf(buff,&%s&,tmp1);&&&&&sprintf(tmp1,&%s&,tmp+1);&&}&&if(strlen(buff)&;12)&k=0;&&else&k=(12-strlen(buff))/2;&&if(k&=0)&mvprintw(by+lines,bx,&%-12.12s&,buff);&&else&mvprintw(by+lines,bx,&%*.*s%-*.*s&,k,k,&&,12-k,12-k,buff);&&lines++;}while(tmp!=NULL);return(lines);}form_scr(){int&i;if(strcmp(TERM,&ansi&)==0)&printf(&[0m[=0E[=7F[=1G[0m[J[7m[m&);initscr();cbreak();mvaddstr(0,0,&┌─────────────────────────────────────┐&);mvaddstr(1,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(2,0,&├─────────────────────────────────────┤&);mvaddstr(3,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(4,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(5,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(6,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(7,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(8,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(9,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(10,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(11,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(12,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(13,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(14,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(15,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(16,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(17,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(18,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(19,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(20,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(21,0,&├─────────────────────────────────────┤&);mvaddstr(22,0,&│&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&│&);mvaddstr(23,0,&└─────────────────────────────────────┘&);mvprintw(22,2,&%s&,tty);attron(A_BOLD);mvprintw(22,20,&%s&,getenv(&VERSION&));mvprintw(1,26,&%s&,getenv(&HOTEL&));attroff(A_BOLD);for(i=0;func!=NULL;i++)&draw(i);CLOCK();signal(SIGPWR,SIG_IGN);signal(3,SIG_IGN);signal(2,SIG_IGN);refresh();}int&wc_getch(win)WINDOW&*win;{int&c,next,next1;noecho();do{&&if(!ACTIVE&&tick&;120)&alarm(0);&&else&alarm(2);&&c=wgetch(win);&&alarm(0);&&if(c!=27)&return(c);&&&&&&&&&&&&&&&&&/*&Choice&Number&&&&&&&&*/&&else&break;&&&&&&&&&&&&&&&&&&&&&&&&&&/*&Arrow&Key&&&&&&&&&&&&*/}&while(1);&&next=wgetch(win);&if(next!='['&&next!='O')&return(next);&next1=wgetch(win);&switch(next1){&&&case&'P':&return(F1);&&&case&'Q':&return(F2);&&&case&'R':&return(F3);&&&case&'S':&return(F4);&&&case&'A':&return(UP);&&&case&'B':&return(DOWN);&&&case&'C':&return(RIGHT);&&&case&'D':&return(LEFT);&&&default&:&return(11200+next1);&};}&CLOCK()&{struct&tm&*ttm;long&&&tt;int&&&&yy,mm,dd,hh,mi,sec;&tt=time(NULL);ttm=localtime(&tt);&yy=ttm-&;tm_year+1900;&mm=ttm-&;tm_mon+1;&dd=ttm-&;tm_mday;&hh=ttm-&;tm_hour;&mi=ttm-&;tm_min;&sec=ttm-&;tm_sec;&mvprintw(1,2,&%s&,pwd);attron(A_BOLD);mvprintw(1,56,&%02d/%02d/%02d&%02d:%02d`%02d&,mm,dd,yy,hh,mi,sec);if(ACTIVE)&{&&&&&mvprintw(22,62,&%-10.10s&,&LOGIN&);}else&{&&&mvprintw(22,62,&%-10.10s&,&&);&&&mvprintw(22,74,&&&&);}attroff(A_BOLD);tick++;if(ACTIVE&&tick&;600)&{endwin();exit(1);}refresh();signal(SIGALRM,CLOCK);}set_env(str)&char&*str;{FILE&*fpt;int&&i=0;fpt=popen(&tty&,&r&);fscanf(fpt,&%s&,tty);pclose(fpt);sprintf(env,&TTY=%s&,tty);putenv(env);fpt=fopen(str,&r&);if(fpt==NULL)&{&&&&perror(str);&&&&return(-1);}i=1;while(!feof(fpt)){&&&&env[0]='\0';&&&&fgets(env,80,fpt);&&&&if(env[0]=='\0')&break;&&&&env[strlen(env)-1]='\0';&&&&if(env[0]!='#'&&env[0]!='!')&putenv(env);&&&&else&if(env[0]=='!')&system(&env[1]);&&&&i++;}fclose(fpt);if(strcmp(getenv(&PRN&),&FILE&)==0)&{&&&&&sprintf(env,&PRN=/tmp/%s&,&tty[5]);&&&&&putenv(env);}return(1);}------------------------文件3.env(一个环境设置文件,必须要有,否则执行出错)----------------------TERM=vt100LOGNAME=testHOME=/usr/testPRN=FILEHOTEL=AAAAAAAAAAA***ERSION=2002.8&&&fdlj53u&&版权所有!stty&icanon&icrnl&onlcr&38400&-istrip&&ixon&ixoff&ixany&echo&echoe&opost------------------------
& 回复于: 17:06:08
辛苦劳动无私奉献!
& 回复于: 17:13:10
精华的贴子。
& 回复于: 17:15:52
& 回复于: 21:38:22
face.c,这个程序我编译错,是不是这样的cc&face.c&-o&face&-lcurses
& 回复于: 22:17:48
这个问题应该问工商银行。他们那都是这样的,用不着在LOGIN下注册用户。这样的程序保密性很强。
& 回复于: 22:53:36
楼上老大,应该是安全性好。
& 回复于: 23:17:21
[这个贴子最后由f7zz在&&01:26am&编辑]其实道理很简单,下面是一个试验。如果想在终端/dev/tty6a上搞一个这个,先disable&/dev/tty6a(你得是“根”哦)。然后试试这个:(也得注意你的权限)scoadmin&&&/dev/tty6a&&;&/dev/tty6a&2&;&1然后在/dev/tty6a上你就可以看到scoadmin了,并且使用它,和在主机上没有区别。主要的问题在于如何管理程序和终端之间的关系,比如启动,关闭程序。小的以前写过一个咚咚,同前面那位兄弟的从道理上讲一样,free给大家——不精彩,供大家参考斧正。有什么问题,mail我,一起讨论,共同改进。================================================================================/*&sterm.c*/#include&&stdio.h&;#include&&errno.h&;void&main&(int&argc,&char&*argv[])/*&argv[1]&-&终端名称&*&argv[2]&-&终端模式&*&argv[3]&-&应用程序&*/{FILE&&&*fp;&&char&&&ttyname[16],sEnv[64];if(argc&3)&&exit(0);/*&测试终端是否有效/可读写&*/sprintf(ttyname,&/dev/%s&,argv[1]);if((fp=fopen(ttyname,&rw&))==NULL)&exit(0);fclose(fp);/*&设置终端模式&*/sprintf(sEnv,&TERM=%s&,argv[2]);&&&putenv(sEnv);/*&将当前进程替换给&argv[3]&&*/&&&execl(argv[3],argv[3],(char&*)0);exit(1);}================================================================================//&tmgr.c/*&==================================================================&*终端控制程序&*f7zz&Write&*&==================================================================*/#include&&stdio.h&;#include&&errno.h&;#include&&unistd.h&;#include&&sys/types.h&;#include&&dirent.h&;#include&&curses.h&;#include&&string.h&;#define&true&1#define&false&0//&------------------------------------------------------------------//&&启动前台程序#define&PROGRAM&main&int&uptty(char&*ttyname,char&*ttytype,char&*sErr){charsCmd[128],sTmp[128];//&检查终端程序是否处于运行状态if(access(ttyname,F_OK)&==&0){sprintf(sErr,&%s终端处于激活状态,请关闭后再启动!\n&,ttyname);return&false;}//&检查对该终端是否有读写权限sprintf(sTmp,&/dev/%s&,ttyname);if(access(sTmp,R_OK|W_OK)&==&-1){sprintf(sErr,&对%s终端没有合法的读写权限,请检查后重试!\n&,ttyname);return&false;}//&启动终端sprintf(sCmd,&sterm&%s&%s&%s&&/dev/%s&;/dev/%s&2&;&1&&&,ttyname,ttytype,PROGRAM,ttyname,ttyname);system(sCmd);sleep(1);//&检查终端程序是否运行if(access(ttyname,F_OK)&!=&0){sprintf(sErr,&%s终端程序启动失败,请重试!\n&,ttyname);return&false;}sprintf(sErr,&%s终端启动成功!\n&,ttyname);return&true;}//&------------------------------------------------------------------//&关闭前台终端void&killtty(char&*ttyname,&char&*sErr){FILE&*fp;char&sCmd[128],sTmp[128];//&检查终端程序是否处于运行状态if(access(ttyname,F_OK)&==&-1&){sprintf(sErr,&%s终端没有程序运行,请检查终端号!\n&,ttyname);return;}if((fp=fopen(ttyname,&r&))==NULL){sprintf(sErr,&%s终端进程文件读入失败!\n&,ttyname);return;}//&取得进程号fgets(sTmp,sizeof(sTmp),fp);if(atoi(sTmp)&==&0){sprintf(sErr,&&);return;}fclose(fp);//&杀死进程sprintf(sCmd,&kill&%s&,sTmp);system(sCmd);//&删除文件remove(ttyname);sprintf(sErr,&%s终端程序关闭成功!\n&,ttyname);return;}//&------------------------------------------------------------------//&启动全部终端#define&TTYTABFILE&ttytab&void&upalltty(){FILE&*fp;char&sTmp[128],ttyname[32],ttytype[32],sErr[128];if((fp=fopen(TTYTABFILE,&r&))==NULL){fprintf(stdout,&打开ttytab文件失败,请检查后重试!\n&);return;}while(!feof(fp)){memset(ttyname,0,sizeof(ttyname));memset(ttytype,0,sizeof(ttytype));fgets(sTmp,sizeof(sTmp),fp);if(!memcmp(sTmp,&!end&,4))break;getsubstr(sTmp,1,ttyname);getsubstr(sTmp,2,ttytype);//&启动终端程序uptty(ttyname,ttytype,sErr);//&打印结果fprintf(stdout,sErr);}fclose(fp);return;}//&------------------------------------------------------------------//&关闭全部程序int&killalltty(){DIR*dp;struct&dirent*dirp;charsErr[128];if((dp&=&opendir(&./&))&==&NULL){fprintf(stdout,&当前目录打开错误,请检查权限!&);return;}while((dirp&=&readdir(dp))&!=&NULL){if(memcmp(&tty&,dirp-&;d_name,3)&==&0){killtty(dirp-&;d_name,sErr);fprintf(stdout,sErr);}}closedir(dp);return;}void&chkstatus(){DIR*dp;struct&dirent&*dirp;charsTmp[64];FILE*fp;if((dp&=opendir(&./&))&==NULL){fprintf(stdout,&当前目录打开错误,请检查权限!&);return;}while((dirp&=readdir(dp))!=NULL){if(memcmp(&tty&,dirp-&;d_name,3)&==&0){fp=fopen(dirp-&;d_name,&r&);fgets(sTmp,sizeof(sTmp),fp);fclose(fp);if(atoi(sTmp)&==&0)continue;else&fprintf(stdout,&活动终端:&%s&&进程号:&%s&\n&,dirp-&;d_name,sTmp);}}closedir(dp);return;}//&字符串函数int&getsubstr(char&*str,int&n,char&*substr){int&i,j,h;char&*p1,*p2;h=0;for(i=0;i&n;i++){j=0;memset(substr,0,sizeof(substr));while(!isgraph(str[h]))&h++;p1=p2=str+h;while(isgraph(*p2)){p2++;j++;h++;}}memcpy(substr,p1,j);substr[j+1]=0;return&j;}//&------------------------------------------------------------------//&主程序char&*sPrompt[]={&\n&,&&\t&&+========================================================+\n&&&\t&&|&&&&&中国工商银行*****************终端管理程序&V1.2SP&&&|\n&,&&\t&&+--------------------------------------------------------+\n&,&&\t&&|&&&&&&&&&&&&&&&&&1.激活ttytab中的全部终端&&&&&&&&&&&&&&&|\n&,&&\t&&|&&&&&&&&&&&&&&&&&2.关闭ttytab中的全部活动终端&&&&&&&&&&&|\n&,&&\t&&|&&&&&&&&&&&&&&&&&3.激活选定终端&&&&&&&&&&&&&&&&&&&&&&&&&|\n&,&&\t&&|&&&&&&&&&&&&&&&&&4.关闭选定终端&&&&&&&&&&&&&&&&&&&&&&&&&|\n&,&&\t&&|&&&&&&&&&&&&&&&&&5.查看全部活动终端的状态&&&&&&&&&&&&&&&|\n&,&&\t&&|&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|\n&,&&\t&&|&&&&&&&&&&&&&&&&&9.退出程序&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|\n&,&&\t&&+========================================================+\n&,&&\t&&&&&&&&&&&&&&&&&&&&请选择(1-5):&,&NULL};void&main(void){//&系统提示int&&i;char&sInput[32],tInput[32],sErr[64];//&接受输入while(true){system(&clear&);i=0;while(sPrompt!=NULL)fprintf(stdout,&%s&,sPrompt[i++]);gets(sInput);fprintf(stdout,&\n&);switch(atoi(sInput)){case&1:upalltty();break;case&2:killalltty();break;case&3:fprintf(stdout,&终端设备名(如tty6a):&);gets(sInput);fprintf(stdout,&仿真类型(默认为vt100):&);gets(tInput);if(tInput[0]==&0)&strcpy(tInput,&vt100&);uptty(sInput,tInput,sErr);fprintf(stdout,&\n&);fprintf(stdout,sErr);break;case&4:fprintf(stdout,&终端设备名(如tty6a):&);gets(sInput);killtty(sInput,sErr);fprintf(stdout,&\n&);fprintf(stdout,sErr);break;case&5:chkstatus();break;case&9:goto&end;default:fprintf(stdout,&错误的选项,请选择1-5\n&);}&&fprintf(stdout,&按Enter键继续......&);getchar();}end:return;}&:em27:&&:em27:&&:em27:&&:em27:&&:em27:&&:em27:&
& 回复于: 23:43:26
[这个贴子最后由f7zz在&&00:05am&编辑]cc&sterm.c&-o&stermcc&tmgr.c&-o&tmgr&-lcurses这是编译命令。sterm是个进程替换程序,主要解决环境变量问题。tmgr是个终端管理程序,解决终端程序的启动和关闭问题。还有个ttytab,格式是:tty09&ansi!end方法有点笨,tty09是设备,ansi是TERM变量。如果在终端上,一般为vt100,文件以!end&结尾。这个文件记录命令1可以启动的全部终端。\t&&+========================================================+\n&&\t&&|&&&&&中国工商银行*****************终端管理程序&V1.2SP&&&|\n&,&\t&&+--------------------------------------------------------+\n&,&\t&&|&&&&&&&&&&&&&&&&&1.激活ttytab中的全部终端&&&&&&&&&&&&&&&|\n&,&\t&&|&&&&&&&&&&&&&&&&&2.关闭ttytab中的全部活动终端&&&&&&&&&&&|\n&,&\t&&|&&&&&&&&&&&&&&&&&3.激活选定终端&&&&&&&&&&&&&&&&&&&&&&&&&|\n&,&\t&&|&&&&&&&&&&&&&&&&&4.关闭选定终端&&&&&&&&&&&&&&&&&&&&&&&&&|\n&,&\t&&|&&&&&&&&&&&&&&&&&5.查看全部活动终端的状态&&&&&&&&&&&&&&&|\n&,&\t&&|&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|\n&,&\t&&|&&&&&&&&&&&&&&&&&9.退出程序&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|\n&,&\t&&+========================================================+\n&,&\t&&&&&&&&&&&&&&&&&&&&请选择(1-5):&,另外的要由终端启动的程序,在某指定目录(可由环境变量指定,我太懒,没有做这个,就在当前目录下,所以有时不是很方便)下运行时创建一个文件,文件名为当前程序运行的终端设备名,内容为当前的进程号。&一个简单的示例如下:(处理的不是很好)FILE&*fp;char&sTmp[32];sprintf(sTmp,&%s&,ttyname(1));fp=fopen(sTmp+5,&w&);fprintf(fp,&%d&,getpid());fclose(fp);在程序结束时,记得删除哦:&&&&&&&&&&remove(ttyname(1)+5);这个实现很灵活,但感觉没写清楚,以后再说吧。这个程序在sco5.0.5,5.0.4上没问题,在三个省用过,应该没什么问题(正常运行,不是指没有bug,需要完善改进的地方还很多,等有空吧)。:)最后说一句,权限问题,不要忘了。
& 回复于: 08:23:22
chmod&06755&stermchmod&06755&tmgr&:)
& 回复于: 11:19:21
& 回复于: 11:57:38
& 回复于: 14:52:09
修改/etc/gettydefs文件可以使终端用设备名作为用户名执行注册程序,没试过,需要查资料。
& 回复于: 18:12:56
好东西大家分享,多谢!
& 回复于: 13:21:27
f7zz你好,你的tmgr终端管理程序,我编译时出现:$&cc&tmgr.c&-o&tmgr&-lcurses&tmgr.c&,&line&16:&error:&undefined&symbol:&charsCmd&tmgr.c&,&line&16:&error:&cannot&dereference&non-pointer&type&tmgr.c&,&line&16:&error:&undefined&symbol:&sTmp&tmgr.c&,&line&16:&error:&cannot&dereference&non-pointer&type&tmgr.c&,&line&25:&warning:&improper&pointer/integer&combination:&arg&tmgr.c&,&line&26:&warning:&improper&pointer/integer&combination:&arg&tmgr.c&,&line&32:&error:&undefined&symbol:&sCmd&tmgr.c&,&line&33:&warning:&improper&pointer/integer&combination:&arg&tmgr.c&,&line&34:&warning:&improper&pointer/integer&combination:&arg&tmgr.c&,&line&123:&error:&undefined&symbol:&charsErr&tmgr.c&,&line&123:&error:&cannot&dereference&non-pointer&type&tmgr.c&,&line&135:&error:&undefined&symbol:&sErr&tmgr.c&,&line&135:&warning:&improper&pointer/integer&combination:&arg&tmgr.c&,&line&136:&warning:&improper&pointer/integer&combination:&arg&tmgr.c&,&line&147:&error:&undefined&symbol:&charsTmp&tmgr.c&,&line&147:&error:&cannot&dereference&non-pointer&type&tmgr.c&,&line&148:&error:&Syntax&error&before&or&at:&*&tmgr.c&,&line&159:&error:&undefined&symbol:&fp&tmgr.c&,&line&159:&warning:&improper&pointer/integer&combination:&op&&=&&tmgr.c&,&line&160:&error:&undefined&symbol:&sTmp&tmgr.c&,&line&160:&warning:&improper&pointer/integer&combination:&arg&tmgr.c&,&line&160:&warning:&improper&pointer/integer&combination:&arg&tmgr.c&,&line&161:&warning:&improper&pointer/integer&combination:&arg怎么回事,请指教???还有前面的fdlj53u的朋友你的文件2:face.c&(一个屏幕显示的操作界面,修改一下可以用的)我用cc&face.c&-o&face&-lcurses也出现:&face.c&,&line&190:&warning:&statement¬&reached&face.c&,&line&297:&warning:&end-of-loop&code¬&reached&face.c&,&line&343:&warning:&argument&is&incompatible&with&prototype:&arg&face.c&,&line&373:&warning:&improper&pointer/integer&combination:&arg这是怎么回事,要改正哪里,请哪位大侠指教!
& 回复于: 11:36:45
这是警告,没有关系的.程序可以正常执行.
& 回复于: 12:07:15
& 回复于: 13:05:51
好象不要这么复杂。先为你的应用建一个用户,如aaaa,再改/etc/inittab,21a:23:respawn:/bin/login&aaaa&&/dev/tty21a&&;/dev/tty21a&2&;&1我一直就这么用着。
& 回复于: 13:19:54
太好了!感谢各位的支持。
& 回复于: 13:39:56
引用:下面引用由[u]alanlql[/u]在&&01:05pm&发表的内容:好象不要这么复杂。先为你的应用建一个用户,如aaaa,再改/etc/inittab,21a:23:respawn:/bin/login&aaaa&&/dev/tty21a&&;/dev/tty21a&2&;&1我一直就这么用着。您的这种方法也可以!!!刚刚试验,可以!!!谢谢啊,&又多学了一招!!!!&:em30:&&:emn26:&&:em30:&
& 回复于: 15:37:23
引用:下面引用由[u]alanlql[/u]在&&01:05pm&发表的内容:好象不要这么复杂。先为你的应用建一个用户,如aaaa,再改/etc/inittab,21a:23:respawn:/bin/login&aaaa&&/dev/tty21a&&;/dev/tty21a&2&;&1我一直就这么用着。我刚才试了,怎么不行了,是不是sco505版的
& 回复于: 16:20:01
我的是sco505我用alanlql的方法改成功了!!!
& 回复于: 22:18:23
我用alanlql的方法怎么不行
& 回复于: 08:31:50
tty21a&端口要不要disable掉?还是要做其它什么修改
& 回复于: 15:05:59
disable&tty21a
& 回复于: 19:46:19
[这个贴子最后由flyingeagle在&&07:54pm&编辑]
& 回复于: 20:40:39
好象用处不是很大。如果用在终端上,服务器就有些受影响了。
& 回复于: 10:32:06
按照&f7zz&&兄的手工做法还是成功了,他的C代码程序我还没去试,实验成功后,发现有弊端,那就是终端掉死了,还需主机这端重新启动程序,挺烦的!
& 回复于: 14:51:00
或者写个SHELL也行啊,呵呵
& 回复于: 16:41:47
楼上朋友,执行face.c这个程序时,190,297,343,373有错,本人无法修改,你能否修改一下?
& 回复于: 17:01:28
眼看花了,头看晕了&
& 回复于: 17:56:16
引用:下面引用由[u]netop5[/u]在&&10:32am&发表的内容:按照&f7zz&&兄的手工做法还是成功了,他的C代码程序我还没去试,实验成功后,发现有弊端,那就是终端掉死了,还需主机这端重新启动程序,挺烦的!手工是成功的,但加在inittab中我没试成功,不知为什么
& 回复于: 19:21:11
--------------------------------------------------------------------------------&&好象不要这么复杂。先为你的应用建一个用户,如aaaa,再改/etc/inittab,21a:23:respawn:/bin/login&aaaa&&/dev/tty21a&&;/dev/tty21a&2&;&1我一直就这么用着。&&&为什么不能正常的登录啊。似乎是在每一行后有一段空格。
& 回复于: 07:00:55
引用:原帖由&"alanlql"&发表:好象不要这么复杂。先为你的应用建一个用户,如aaaa,再改/etc/inittab,
21a:23:respawn:/bin/login&aaaa&&/dev/tty21a&&;/dev/tty21a&2&;&1
我一直就这么用着。
试过,成功,非常好,简单易用,致敬^_^&:D&&:D&&:D
原文链接:
转载请注明作者名及原文出处

参考资料

 

随机推荐