|
藍森林 http://www.lslnet.com 2006年8月08日 13:08
如何在終端上不出現login,直接執行應用程序。
例如:我的終端是tty21a ,終端一開機,自動登錄到我的應用程序
畫面。而不出現login
|
如何在終端上不出現login,直接執行應用程序。
太難了,已經有幾十個人提問,至今無人回答 |
如何在終端上不出現login,直接執行應用程序。
可以的,只是要固定終端口子.我做過,需要源程序嗎? |
如何在終端上不出現login,直接執行應用程序。
是嗎?有給我一個啊。bby_yc2002@sohu.com |
如何在終端上不出現login,直接執行應用程序。
太好了,發我一份吧!!!!!
lcz88990200@sina.com |
如何在終端上不出現login,直接執行應用程序。
[這個貼子最後由edwardcj在 2002/12/06 12:33pm 編輯]
沒這麼複雜吧,改一下inittab就可以了。
21a:23:respawn:/path/your_program tty21a m |
如何在終端上不出現login,直接執行應用程序。
414 |
如何在終端上不出現login,直接執行應用程序。
-->
不行,終端都死掉了
|
如何在終端上不出現login,直接執行應用程序。
-->
等待你的源程序
|
如何在終端上不出現login,直接執行應用程序。
我也曾經修改過/etc/inittab文件,總是以失敗告終,有哪位對此有經驗的俠客請告之! |
如何在終端上不出現login,直接執行應用程序。
俺也想知道!!!! |
如何在終端上不出現login,直接執行應用程序。
^UP |
如何在終端上不出現login,直接執行應用程序。
[這個貼子最後由fdlj53u在 2002/12/06 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 parameters\n");
exit(1);
}
if(strcmp(argv[1],"login")==0) {
for(i=2;i<argc;i++) login(argv[i]);
}
else if(strcmp(argv[1],"face")==0) {
for(i=3;i<argc;i++) face(argv[2],argv[i]);
}
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 5
static 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[i]){
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[i]);
attroff(attr);
refresh();
return(a[i]);
}
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[i]!=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[i],"TTY=%s",tty);
putenv(env[i]);
fpt=fopen(str,"r");
if(fpt==NULL) {
perror(str);
return(-1);
}
i=1;
while(!feof(fpt)){
env[i][0]='\0';
fgets(env[i],80,fpt);
if(env[i][0]=='\0') break;
env[i][strlen(env[i])-1]='\0';
if(env[i][0]!='#'&&env[i][0]!='!') putenv(env[i]);
else if(env[i][0]=='!') system(&env[i][1]);
i++;
}
fclose(fpt);
if(strcmp(getenv("PRN"),"FILE")==0) {
sprintf(env[i],"PRN=/tmp/%s",&tty[5]);
putenv(env[i]);
}
return(1);
}
------------------------
文件3.env(一個環境設置文件,必須要有,否則執行出錯)
----------------------
TERM=vt100
LOGNAME=test
HOME=/usr/test
PRN=FILE
HOTEL=AAAAAAAAAAAA
VERSION=2002.8 fdlj53u 版權所有
!stty icanon icrnl onlcr 38400 -istrip ixon ixoff ixany echo echoe opost
------------------------
|
如何在終端上不出現login,直接執行應用程序。
辛苦勞動
無私奉獻!
|
如何在終端上不出現login,直接執行應用程序。
精華的貼子。 |
如何在終端上不出現login,直接執行應用程序。
高人! |
如何在終端上不出現login,直接執行應用程序。
face.c,這個程序我編譯錯,是不是這樣的
cc face.c -o face -lcurses
|
如何在終端上不出現login,直接執行應用程序。
這個問題應該問工商銀行。他們那都是這樣的,用不著在LOGIN下註冊用戶。
這樣的程序保密性很強。 |
如何在終端上不出現login,直接執行應用程序。
樓上老大,
應該是安全性好。 |
如何在終端上不出現login,直接執行應用程序。
[這個貼子最後由f7zz在 2002/12/07 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
/* ==================================================================
*終端控制程序
*2001.10.20f7zz 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[i]!=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: |
| |