2017-2018-1 20155220 《信息安全系统设计基础》第四周学习总结
系统调用
read系统调用
size_t read(int fildes, void *buf, size_t nbytes);
#include<unistd.h>
open系统调用
int open(const char *filename, int flags);
int open(const char *filename, int flags, mode_t mode);
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
- read系统调用的作用是从与文件描述符相关的文件里读入nbytes个字节的数据,并把它们放到数据区buf中,返回读入的字节数,失败时返回-1。
close系统调用
int close(int fildes);
#include <unistd.h>
- close函数的作用是终于文件描述符fildes一其对应的文件之间的关联。
myhead
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
void myhead(char *filename,int n)
{
int count=0;
char ch;
int fd=0;
fd=open(filename,O_RDONLY,0);
while(read(fd,&ch,1)!=0)
{
putchar(ch);
if(ch=='
'){count++;}
if(count==n){break;}
}
}
mytail
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
void mytail(char *filename,int n)
{
int count=0,count1=0;
char ch;
int fd=0;
fd=open(filename,O_RDONLY,0);
while(read(fd,&ch,1)!=0)
{
if(ch=='
'){count++;}
}
close(filename);
fd=open(filename,O_RDONLY,0);
while(read(fd,&ch,1)!=0)
{
if(count1>=(count-n-1)){putchar(ch);}
if(ch=='
'){count1++;}
}
close(filename);
}
学习过程遇到的问题
- 在实现mytail过程中,出现了输出行数少一行。
- 解决:
if(count1>=(count-n)){putchar(ch)
改为
if(count1>=(count-n-1)){putchar(ch)