1linux中一切都是文件
文件有2中方式:
1:文件描述符 (0,STDIN_FILENO),(1,STDOUT_FILENO),(2,STDERR_FILENO)
2文件指针 (文件描述符和文件指针(FILE *)一一对应,(0,stdin)(1,stdout)(2,stderr)
两者之间的转换
(1)int fileno(FILE *stream) //文件指针转换成文件描述符
(2)FILE *fdopen(int fd,const char *mode) //文件描述符转换成指针
1.open
int open(const char *pathname,int flags) ;
int open(const char *pathname,int flags,mode_t mode);
flags常用值:
1:O_RDONLY 打开一个供读取的文件
2:O_WRONLY打开一个供写入的文件
3:O_RDWR 打开一个可供读写的文件
4:O_APPEND 写入数据将被追加到文件尾
5:O_CREAT 打开文件,若不存在则创建文件
6;O_EXCL 如果已将有O_CREAT且文件存在,则报错
7:O_TRUNC 打开的时候,将文件清空
2.close
int close(int fd); //关闭文件描述符
3.read
ssize_t read(int fd,void *buf,size_t count);//成功时返回从文件复制到缓存区的字节数
4.write
ssize_t write(int fd,const void *buf,size_t count);
注意write返回大于0时,并不代表buf内容写到了磁盘上,只是copy到内核缓存区中,要实现将缓存区内容真正
拷贝到磁盘上,调用int fsync(int fd)或在open中指定O_SYNC
5.lseek
off_t lseek(int fd,off_t offset,int whence);
whence取值 SEEK_SET SEEK_CUR SEEK_END
注意一个空洞文件的产生
6.opendir
DIR *opendir(const char *name);
7.readdir
struct dirent *readdir(DIR *dirp);
8.closedir
int closedir(DIR *dirp);
9.rmdir
int rmdir(const char *pathname);
10.chmod
int chmod(const char *path,mode_t mode);//更改权限
11.chown
int chown(const char *path,uid_t owner,gid_t group);//更改文件所有者/所属组