linux命令实现:write
来源:互联网 发布:空调的选购 知乎 编辑:程序博客网 时间:2024/06/06 09:52
write:用于终端之间的用户通信。
write [username] [终端]
代码实现
#include<stdio.h>#include<stdlib.h>#include<termios.h>#include<unistd.h>#include<utmp.h>#include<fcntl.h>#include<string.h>#include<malloc.h>#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 0
- linux命令实现:write
- linux系统open、 write、文件操作, ls命令实现
- Unix/Linux系统使用命令wall,write,mesg命令实现快速对话
- Linux网络命令--write和wall命令
- Linux 0.11中write实现
- linux wall(write all) 命令详解
- Linux中write命令的用法
- linux write 命令 退格键无法生效
- linux 操作系统中write命令的使用
- linux用户间通信命令write和wall
- Linux命令之write调用的原子性
- Linux命令之write调用的原子性
- Linux write指令的代码实现(自己编写实现)
- Linux VFS中write系统调用实现原理
- 驱动函数write-linux系统调用如何实现
- LDD chapter3:write的奥秘-linux系统调用如何实现?
- write的奥秘-linux系统调用如何实现?
- 【Linux】使用read、write、lseek函数实现文件读写操作
- 分享:5个解决方法帮助你的团队高效运作
- fastjson转bean和集合的实用方法
- Unity3D研究院之使用C#语言建立本地数据库
- adb shell 后续继续输入命令
- Hadoop之MapReduce-Partition编程
- linux命令实现:write
- TinyHTTPd--超轻量型Http Server源码分析
- 利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
- ArrayIndexOutofBound AbsListView$RecycleBin.addScrapView
- xib---拖拽的方法搭建视图
- ThinkPHP中利用SESSION实现用户登录验证的方法
- (7.2.5)细说SQL Server中的加密
- Notepad++ 快捷键 大全 官方整理过来的
- 用两个栈实现队列和用两个队列实现栈