📄 main.c
字号:
int
dodelete(argc,argv,p)
int argc;
char *argv[];
void *p;
{
int i;
for(i=1;i < argc; i++){
if(unlink(argv[i]) == -1){
printf("Can't delete %s",argv[i]);
perror("");
}
}
return 0;
}
int
dorename(argc,argv,p)
int argc;
char *argv[];
void *p;
{
if(rename(argv[1],argv[2]) == -1){
printf("Can't rename %s",argv[1]);
perror("");
}
return 0;
}
int
doexit(argc,argv,p)
int argc;
char *argv[];
void *p;
{
int i;
time_t StopTime;
struct session *sp;
StopTime = time(&StopTime);
main_exit = TRUE; /* let everyone know we're out of here */
/* Alert each session task that we're aborting */
for(i=0;i<Nsessions;i++){
if((sp = Sessions[i]) == NULL)
continue;
alert(sp->proc,EABORT);
alert(sp->proc1,EABORT);
alert(sp->proc2,EABORT);
}
reset_all();
if(Dfile_updater != NULL)
alert(Dfile_updater,0); /* don't wait for timeout */
for(i=0;i<100;i++)
kwait(NULL); /* Allow tasks to complete */
shuttrace();
logmsg(-1,"NOS was stopped at %s", ctime(&StopTime));
if(Logfp){
fclose(Logfp);
Logfp = NULL;
}
clrscr();
iostop();
exit(0);
return 0; /* To satisfy lint */
}
int
dohostname(argc,argv,p)
int argc;
char *argv[];
void *p;
{
if(argc < 2)
printf("%s\n",Hostname);
else {
struct iface *ifp;
char *name;
if((ifp = if_lookup(argv[1])) != NULL){
if((name = resolve_a(ifp->addr, FALSE)) == NULL){
printf("Interface address not resolved\n");
return 1;
} else {
if(Hostname != NULL)
free(Hostname);
Hostname = name;
/* remove trailing dot */
if ( Hostname[strlen(Hostname)] == '.' ) {
Hostname[strlen(Hostname)] = '\0';
}
printf("Hostname set to %s\n", name );
}
} else {
if(Hostname != NULL)
free(Hostname);
Hostname = strdup(argv[1]);
}
}
return 0;
}
int
dolog(argc,argv,p)
int argc;
char *argv[];
void *p;
{
static char *logname;
if(argc < 2){
if(Logfp)
printf("Logging to %s\n",logname);
else
printf("Logging off\n");
return 0;
}
if(Logfp){
logmsg(-1,"NOS log closed");
fclose(Logfp);
Logfp = NULL;
free(logname);
logname = NULL;
}
if(strcmp(argv[1],"stop") != 0){
logname = strdup(argv[1]);
Logfp = fopen(logname,APPEND_TEXT);
logmsg(-1,"NOS was started at %s", ctime(&StartTime));
}
return 0;
}
int
dohelp(argc,argv,p)
int argc;
char *argv[];
void *p;
{
register struct cmds *cmdp;
int i;
char buf[66];
printf("Main commands:\n");
memset(buf,' ',sizeof(buf));
buf[64] = '\n';
buf[65] = '\0';
for(i=0,cmdp = Cmds;cmdp->name != NULL;cmdp++,i = (i+1)%4){
strncpy(&buf[i*16],cmdp->name,strlen(cmdp->name));
if(i == 3){
printf(buf);
memset(buf,' ',sizeof(buf));
buf[64] = '\n';
buf[65] = '\0';
}
}
if(i != 0)
printf(buf);
return 0;
}
/* Attach an interface
* Syntax: attach <hw type> <I/O address> <vector> <mode> <label> <bufsize> [<speed>]
*/
int
doattach(argc,argv,p)
int argc;
char *argv[];
void *p;
{
return subcmd(Attab,argc,argv,p);
}
/* Manipulate I/O device parameters */
int
doparam(argc,argv,p)
int argc;
char *argv[];
void *p;
{
register struct iface *ifp;
int param;
int32 val;
if((ifp = if_lookup(argv[1])) == NULL){
printf("Interface \"%s\" unknown\n",argv[1]);
return 1;
}
if(ifp->ioctl == NULL){
printf("Not supported\n");
return 1;
}
if(argc < 3){
for(param=1;param<=16;param++){
val = (*ifp->ioctl)(ifp,param,FALSE,0L);
if(val != -1)
printf("%s: %ld\n",parmname(param),val);
}
return 0;
}
if((param = devparam(argv[2])) == -1){
printf("Unknown parameter %s\n",argv[2]);
return 1;
}
if(argc < 4){
/* Read specific parameter */
val = (*ifp->ioctl)(ifp,param,FALSE,0L);
if(val == -1){
printf("Parameter %s not supported\n",argv[2]);
} else {
printf("%s: %ld\n",parmname(param),val);
}
return 0;
}
/* Set parameter */
(*ifp->ioctl)(ifp,param,TRUE,atol(argv[3]));
return 0;
}
#ifndef MSDOS
int
doescape(argc,argv,p)
int argc;
char *argv[];
void *p;
{
if(argc < 2)
printf("0x%x\n",Escape);
else
Escape = *argv[1];
return 0;
}
#endif MSDOS
/* Generate system command packet. Synopsis:
* remote [-p port#] [-k key] [-a hostname] <hostname> reset|exit|kickme
*/
int
doremote(argc,argv,p)
int argc;
char *argv[];
void *p;
{
struct sockaddr_in fsock;
int s,c;
uint8 *data,x;
uint16 port,len;
char *key = NULL;
int klen;
int32 addr = 0;
char *cmd,*host;
port = IPPORT_REMOTE; /* Set default */
optind = 1; /* reinit getopt() */
while((c = getopt(argc,argv,"a:p:k:s:")) != EOF){
switch(c){
case 'a':
addr = resolve(optarg);
break;
case 'p':
port = atoi(optarg);
break;
case 'k':
key = optarg;
klen = strlen(key);
break;
case 's':
Rempass = strdup(optarg);
return 0; /* Only set local password */
}
}
if(optind > argc - 2){
printf("Insufficient args\n");
return -1;
}
host = argv[optind++];
cmd = argv[optind];
if((s = socket(AF_INET,SOCK_DGRAM,0)) == -1){
perror("socket failed");
return 1;
}
len = 1;
/* Did the user include a password or kickme target? */
if(addr != 0)
len += sizeof(int32);
if(key != NULL)
len += klen;
if(len == 1)
data = &x;
else
data = mallocw(len);
fsock.sin_family = AF_INET;
fsock.sin_addr.s_addr = resolve(host);
fsock.sin_port = port;
switch(cmd[0]){
case 'r':
data[0] = SYS_RESET;
if(key != NULL)
strncpy((char *)&data[1],key,klen);
break;
case 'e':
data[0] = SYS_EXIT;
if(key != NULL)
strncpy((char *)&data[1],key,klen);
break;
case 'k':
data[0] = KICK_ME;
if(addr != 0)
put32(&data[1],addr);
break;
default:
printf("Unknown command %s\n",cmd);
goto cleanup;
}
/* Form the command packet and send it */
if(sendto(s,data,len,0,(struct sockaddr *)&fsock,sizeof(fsock)) == -1){
perror("sendto failed");
goto cleanup;
}
cleanup:
if(data != &x)
free(data);
close_s(s);
return 0;
}
/* Execute a command with output piped to more */
int
dopage(argc,argv,p)
int argc;
char *argv[];
void *p;
{
FILE *fp;
FILE *outsav;
fp = tmpfile();
outsav = stdout;
stdout = fp;
subcmd(Cmds,argc,argv,p);
stdout = outsav;
newproc("view",512,view,0,(void *)fp,NULL,0); /* View closes fp */
return 0;
}
/* Set kernel process debug flag */
int
dodebug(argc,argv,p)
int argc;
char *argv[];
void *p;
{
setbool(&Kdebug,"kernel debug",argc,argv);
return 0;
}
/* Set temp file wipe-on-close flag */
int
dowipe(argc,argv,p)
int argc;
char *argv[];
void *p;
{
setbool(&_clrtmp,"tmp file wiping",argc,argv);
return 0;
}
/* No-op command */
int
donothing(argc,argv,p)
int argc;
char *argv[];
void *p;
{
return 0;
}
/* Log messages of the form
* Tue Jan 31 00:00:00 1987 44.64.0.7:1003 open FTP
*/
void
logmsg(int s,char *fmt, ...)
{
va_list ap;
char *cp;
long t;
int i;
struct sockaddr fsocket;
#ifdef MSDOS
int fd;
#endif
if(Logfp == NULL)
return;
time(&t);
cp = ctime(&t);
rip(cp);
i = SOCKSIZE;
fprintf(Logfp,"%s",cp);
if(getpeername(s,&fsocket,&i) != -1)
fprintf(Logfp," %s",psocket(&fsocket));
fprintf(Logfp," - ");
va_start(ap,fmt);
vfprintf(Logfp,fmt,ap);
va_end(ap);
fprintf(Logfp,"\n");
fflush(Logfp);
#ifdef MSDOS
/* MS-DOS doesn't really flush files until they're closed */
fd = fileno(Logfp);
if((fd = dup(fd)) != -1)
close(fd);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -