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
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
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);
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;
}