1.open函数

函数原型

  • int open(const char* pathname,int flags);//路径名、打开方式
  • int open(const char* pathname,int flags,mode_t mode);
  • flags的参数:O_REONLY、O_WRONLY、O_REWD、O_APPEND、O_EXCL(判断文件是否存在)、O_TRUNC(把文件截断,就是清零)、O_NONBLOCK
  • 创建文件的时候,指定文件的权限,权限同时受umask影响,结论为:文件权限=mode&~umask
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main(int argc,char* argv[])
{
int fd;
fd=open("./student.txt",O_RDONLY|O_CREAT,0644);
printf("fd=%d\n",fd);
close(fd);//关闭文件
return 0;
}

2.read函数

函数原型

  • sszie_t read(int fd,void *buf,size_t count);
  • 参数 fd:文件描述符 buf:存数据的缓冲区 count:缓冲区大小
  • 返回值 成功:读到的字节数 失败:-1

3.write函数

函数原型

  • sszie_t write(int fd,const void *buf,size_t count);
  • buf:待写出数据的缓冲区,从缓冲区写,防止误操作加const
  • count:数据的大小

4.系统调用函数实现cp

#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
char buf[1024];
int fd1=open(argv[1],O_RDONLY);
if(fd1==-1)
{
perror("open agrv1 error");
exit(1);
}
int fd2=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0664);
if(fd2==-1)
{
perror("read error");
break;
}
int n=0;
while((n=read(fd1,buf,1024))!=0)

{
write(fd2,buf,n);
}
close(fd1);
close(fd2);
return 0;
}
  • 通用的 makefile文件
src=$(wildcard *.c)
obj=$(patsubst %.c,%,$(src))
ALL:$(obj)
%:%c
gcc $< -o $@
clean:
-rm -rf $(obj)
.PHONY:clean ALL

5.库函数  

FILE *fopen(const char *pathname, const char *mode);

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb,

                    FILE *stream);

#include <stdio.h>
char buff[1];
char ch;
void mycopy(char *sfile,char *dfile)
{
FILE *sfp=fopen(sfile,"r");
if(sfp == NULL)
{
printf("fail to open sfile!");
}
FILE *dfp=fopen(dfile,"w");
if(dfp == NULL)
{
printf("fail to open dfile!");
}
while(fread(buff,1,1,sfp))
{
fwrite(buff,1,1,dfp);
}
fclose(sfp);
fclose(dfp);
return ;
}
int main(int argc,char *argv[])
{
if(argc<3)
{
printf("请输入正确的参数个数!");
return -1;
}
char *sfile=argv[1];
char *dfile=argv[2];
mycopy(sfile,dfile);
return 0;


}