linux命令实现,linux命令实现:write

write:用于终端之间的用户通信。

write [username] [终端]

代码实现

#include

#include

#include

#include

#include

#include

#include

#include

#define PATH "/var/run/utmp"

#define PREPATH "/dev/"

char BUF[4096];

char *getpath(char *);

void write_p(char *);

int main(int ac,char **av)

{

if(ac != 2&&ac != 3){

return ;

}

char *str;

if(ac == 2){

str = getpath(av[1]);

write_p(str);

return ;

}

if(find(av[2],av[1])) {

printf("%s is not login this \n",av[1]);

return;

}

write_p(av[2]);

}

char *getpath(char *name)//return stt* pts/*

{

if(name == NULL) return NULL;

struct utmp p;

char *str = (char *)malloc(sizeof(char)*UT_LINESIZE);

int fp;

ssize_t rd;

if((fp = open(PATH,O_RDONLY)) == -1){

perror(PATH);

exit(-1);

}

while((rd = read(fp,&p,sizeof(struct utmp))) != 0)

{

if(rd == -1){

perror(PATH);

exit(-1);

}

if(strcmp(name,p.ut_user) == 0) strcpy(str,p.ut_line);

}

if(strlen(str) == 0) {

printf("no login\n");

exit(-1);

}

return str;

}

void write_p(char *path)

{

int fp;

ssize_t rd;

char str[256];

strcpy(str,PREPATH);

strcat(str,path);

if((fp = open(str,O_WRONLY)) == -1){

perror(str);

exit(-1);

}

while(fgets(BUF,4096,stdin) != NULL)

{

if(write(fp,BUF,strlen(BUF)) == -1){

perror(str);

exit(-1);

}

}

return ;

}

int find(char *path,char *name)

{

int fp;

ssize_t rd;

struct utmp x;

if((fp = open(PATH,O_RDONLY)) == -1){

perror(PATH);

exit(-1);

}

while((rd = read(fp,&x,sizeof(struct utmp))) != 0){

if(rd == -1){

perror(PATH);

exit(-1);

}

if(strcmp(path,x.ut_line) == 0 && strcmp(name,x.ut_user) == 0) return 0;

}

return 1;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值