所用到的头文件
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/stat.h> //文件修改权限
#include<sys/types.h> //文件删除
#include<unistd.h> //获取当前目录
#include<dirent.h> //目录流
#include<pwd.h> //获取用户名
#include<grp.h> //获取组名
#include<time.h> //获取通过时间将数字改为日历时间
#include<fcntl.h>
#define ARGS_CHECK(argc,num){if(argc!=num) \
{fprintf(stderr,"args error\n");return -1;}}
#define ERROR_CHECK(ret,num,msg){if(ret == num){\
perror(msg);return -1;}}
makefile
SRCS:=$(wildcard *.c)
EXES:=$(patsubst %.c,%,$(SRCS))
all:$(EXES)
%:%.c
gcc $^ -o $@
clean:
$(RM) $(EXES)
ssize_t read(int fd,void* buf,size_t count);
//1.count应当是申请内存的大小
//2.read前线清空buf
模拟读取文件
#include<43func.h>
int main(int argc ,char* argv[]){
ARGS_CHECK(argc,2);
int fd =open(argv[1],O_RDWR);
ERROR_CHECK(fd,-1,"open");
printf("fd = %d\n",fd);
char buf[10] = {0};
ssize_t st = read(fd,buf,sizeof(buf));
puts(buf);
close(fd);
}
- buf[]越大,用户态和内核态切换次数越小
- 使用文件流的优势和劣势:零碎的写入,少量的系统调用。劣势:拷贝次数更多(需要拷贝到缓存区)