- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chapter2-用户、文嫉宁操作与联机帮助
Unix/Linux编程;第2章 用户、文件操作与联机帮助 --编写who命令;概念与技巧:;相关的系统调用:
open、read、write、creat、lseek、close
perror
相关命令:
man
who
cp
login;主要内容:;2.1.1 who命令能做些什么?
2.1.2 who命令是如何工作的?
2.1.3 如何编写who?;2.1.1 who命令能做些什么?;2.1.2 who命令是如何工作的?;who的工作原理:;2.1.3 如何编写who;(2)答案:使用open、read和close;fd = open ( name , mode )
n = read ( fd , array , numchars )
目标:把数据读取到缓冲区
返回值:-1 遇到错误
numread 成功读取,返回读取的字节
数目。
Int rusult = close ( int fd )
关闭进程和文件fd之间的连接,如果关闭的过 程中出现错误,close返回 -1 。
;(3)编写 who1.c;show_info( struct utmp *utbufp )
{
printf(%-8.8s, utbufp-ut_name); /* the logname*/
printf( ); /* a space*/
printf(%-8.8s, utbufp-ut_line); /* the tty*/
printf( ); /* a space*/
printf(%10ld, utbufp-ut_time); /* login time*/
printf( ); /* a space*/
#ifdef SHOWHOST
printf((%s), utbufp-ut_host); /* the host */
#endif
printf(\n); /* newline */
};两处问题需要改进:;2.2.1 问题1:cp命令能做些什么?
答案:复制文件
典型用法:$ cp source – file target – file
如果 target – file 所指的文件不存在,cp就创建这个文件,如果已经存在就覆盖。
2.2.2 问题2:cp命令是如何创建/重写文件的?
答案: creat
write;创建/重写文件
int fd = creat (char * filename,mode_t mode)
creat告诉内核创建一个名为filename的文件,如果这个文件不存在,就创建它;如果已经存在,就把它的内容清空,把文件的长度设为0。
如果内核成功创建文件,则把文件的许可位设置为mode所指定的值。
写文件
n = write ( fd , buffer , num )
如果内核不能写入或写入失败,write返回-1,如果成功写入,则返回写入的字节数。;2.2.3 问题3:如何编写cp;#define BUFFERSIZE 4096
#define COPYMODE 0644
main( int ac, char *av[] )
{
int in_fd, out_fd, n_chars;
char buf[BUFFERSIZE]; /*check args */
if ( ac != 3 )
{
fprintf( stderr, usage: %s source destination\n, *av); exit(1);
} ;/*open files*/
if ( ( in_fd=open(av[1], O_RDONLY) ) == -1 ) oops (Cannot open , av[1]);
if ( ( out_fd = creat( av[2], COPYMODE ) ) == -1 ) oops( Cannot creat, av[2]);
/*copy files */
while ( (n_chars = read ( in_fd , buf, BUFFERSIZE )) 0 )
if ( write( out_fd, buf, n_chars ) != n_chars ) oops (Write error t
文档评论(0)