linux用文件描述符(fd)来描述文件和设备,是一个整数,其中0,1,2已经用来表示标准输入,标准输出,和标准错误。其他的文件由系统分配0~OPENMAX。是非常重要的,在使用完毕记得close关闭,一般来说在没有释放之前fd相同代表操作同一个文件。
打开一个文件
-
int open(const char *pathname,int flag | mode_t mode)
-
-pathname: 文件名字/设备路径
-
- flag :标志 O_APPENED(每次操作在文件后面,不会覆盖) O_CREATE (不存在时创建,必须使用mode参数) | O_EXCL (查看文件是否存在,可结合创建一起使用) | O_TRUNC (将文章长度截断为0).
-
-mode:权限设置 5位数字 777 。 - -
关闭一个文件
close(fd);
读取文件
ssize_t read(int fd, void *buff, size_t count);
- fd :文件描述符 打开的文件返回值。
-
- buff :存放内容的缓冲区。
-
- count:读取内容的大小。
- -
写文件
ssize_t write(int fd, const void *buff, size_t count);
同读相同。
#include <unistd.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_LEN 100
int main(void)
{
int fd,nwrite,len;
int nread=1;
char *buff="Hello\n";
char buf_r[BUF_LEN];
char buf[BUF_LEN];
buf_r[BUF_LEN-1] = '\0';
printf("please input the file you want to open:\n");
scanf("%s",buf_r); //输入文件名字
printf("buf is %s\n",buf_r);
fd=open(buf_r,O_RDWR | O_CREAT, 0666); //文件读写 并且不存在就创建//用户,组,其他用户都有读写的权利
if(fd < 0){
perror("open to fail");
exit(1);
}
while(nread>0)
{
nread=read(fd,buf,1); //每次输出一个字符
printf("%s",buf);
}
close(fd);
}
写文件
#include <unistd.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_LEN 100
int i=0;
int main(void)
{
int fd,nwrite,nread,len;
char *buff="abcdefg";
char buf_r[BUF_LEN];
buf_r[BUF_LEN-1] = '\0';
len=strlen(buff);
fd=open("hello",O_RDWR | O_CREAT, 0666);
if(fd < 0){
perror("open to fail");
exit(1);
}
for(i=0;i<300;i++)
{
sprintf("%s",i); //写入1~300 将其转换成ASCII码
if((nwrite=write(fd,i,4))==300){
printf("write success\n");
}
}
close(fd);
exit(0);
}
实现copy代码
#include <unistd.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_LEN 100
int fd,fd1;
int ret;
int main(int argc,char **argv)
{
char buf_r[BUF_LEN];
char buf[BUF_LEN];
char nbuf[BUF_LEN];
buf_r[BUF_LEN-1] = '\0';
if(argc!=3)
{
printf("please add more\n"); //参数不够 必须有源文件,复制文件
return -1;
}
if((fd=open(argv[1],O_RDWR | O_CREAT, 0666))<=0)
{
printf("error to open");
exit(1);
}
if((fd1=open(argv[2],O_RDWR | O_CREAT, 0666))<=0)
{
printf("error to open1");
exit(1);
}
while((ret=(read(fd,buf_r,sizeof(buf_r))))>0) //=0 文件已经到达末尾
{
write(fd1,buf_r,ret);
}
return 0;
}