实验题目:不想被那些发送 write 的人打扰的用户可以使用命令 mesg。阅读 mesg.通过程 序试验以
了解它如何工作,然后写)个这样的程序。
首先我们得知道mesg命令是做什么的。实际上, mesg命令决定是否允许其他人传讯息到自己的终端机界面
#include
#include
#include
#include
#include
#include
#include
#define MASKGW 16
#define SETGW0 65519
#define SETGW1 16
/*
*/
int main(int ac, char *argv[]){
char tty_name[255];
int fd;
int length;
struct stat info;
int state;
//output the tty name to output.txt
system("tty>output.txt");
if( (fd = open( "output.txt", O_RDONLY )) == -1 ){
printf("file open error\n");
exit( 1 );
}
//read the tty name and save it to the array tty_name
if((length = read( fd, tty_name, 255 ))<0){
printf("file read error\n");
exit( 1 );
}
close( fd );
tty_name[--length] = '\0';
if( stat( tty_name, &info ) == -1){
perror(tty_name);
exit( 1 );
}
if( ac == 1 ){
state = ((info.st_mode)&MASKGW);
if( state == 16 )
printf("is y\n");
else
printf("is n\n");
exit( 0 );
}
//change group w according to 'y' and 'n'
if( (strcmp(argv[1],"y")) == 0 )
info.st_mode = (info.st_mode)|SETGW1;
else
info.st_mode = (info.st_mode)&(SETGW0);
//set group w
chmod(tty_name, info.st_mode);
}