LINUX中文件描述

来源:互联网 发布:linux搜狗输入法设置 编辑:程序博客网 时间:2024/05/22 03:33
对于LINUX操作系统来说,它是以文件为基础而设计的,即一切操作皆文件。LINUX的文件子系统主要用于管理文件存储空间的分配、文件访问权限的维护、对文件的各种操作。文件主要包含两方面的内容:一是文件本身所包含的数据;另一是文件的属性,也称元数据,包括文件的访问权限、所有者、文件大小、创建日期等。**文件系统**是由一系列块(block)构成的,每个块的大小因不同的文件系统而不同,但是一个文件系统一旦安装之后,块的大小就固定了。对于内核而言,所有的打开文件都由文件描述符表示。**文件描述符**是一个非负整数。在读写一个文件前,需要先调用open或create函数打开文件,成功执行这两个上都将返回 一个文件描述符。文件描述符的取值范围0~NR_OPEN(255)之间,也就是说每个程序最多只能打开256个文件。文件描述符  0  标准输入文件,即键盘          1   标准输出文件,即显示器          2   标准错误输出,一般也是指显示器一、文件的分类   1. 普通文件(regular file);   2.  目录文件(directory file):其内容是该目录下的文件和子目录的信息   3. 字符特殊文件(character special file):用于表示系统中字符类型的设备,比如键盘、鼠标等,这些硬件对操作系统来说只是一个文件   4.  块特殊文件(block special file):用于表示系统中块类型的设备,如硬盘、光驱等,一次至少读一个块    5. FIFO:命名管道用于进程间的通信   6. 套接字(socket):用于网络通信   7. 符号连接(symbolic link):指向另一个文件,是另一文件的引用

二、文件的输入输出
1. open()函数,用来打开或创建一个文件
原型:int open(const char *pathname,int flags)
第一个参数pathname是要打开或创建的含路径的文件名
flag打开文件的方式: O-REONLY 只读
O-WRONLY 只写
O-RDWR 可读可写
O-EXCL 文件若不存在则创建该文件,若存在则打开文件出错
O-CREAT 文件不存在则自动建立文件,需第三个参数mode
O-TRUNC:若文件存在则会将文件长度清为0
O-APPEND:所写数据会以追加的方式加入到文件后面
O-SYNC:以同步的方式打开文件,任何对文件的修改都会阻塞直到物理磁盘上的数据同步以后返回
O-NEDLAY 以非阻塞的方式打开文件,即对文件的操作都会立即返回

    #include<fcntl.h>    #include<stdlib.h>    int fd=open("b.txt",O_RDWR|O_CREAT|O_EXCL,0664);      if(-1==fd)      perror("open error");      exit(-1); 
     2. creat():文件的创建          creat(const char *pathname,mode_t mode);如果pathname所指向的文件不存在则重新创建,若存在则原文件被新     文件覆盖      3.close(fd):关闭一个已打开的文件。       调用成功时,返回值为0,否则返回-1       注意:close函数调用成功并不保证数据能全部写回硬盘        4. size_t read(int fd,void *buf,size_t count)   从文件描述符fd所指向的文件中读取count个字节的数据到buf所指向的缓存中。返回值表示实际读取到的字节数。
#include <unistd.h>#include<stdlib.h>int res=read(fd,buf,6);if(-1==fd)    perror("read"),exit(-1);
  1. ssize_t write(int fd,const void *buf,size_t count)
    将buf所指向的count个字节数据写入到由文件描述符fd所指向的文件中。
    如果调用成功则返回写入的字节数
#include <unistd.h>#include<stdlib.h>int res=write(fd,"hello",sizeof("hello"));if(-1==res)    perror("write"),exit(-1);

三、文件读写指针的移动
off_t lseek(int fildes,off_t offset,int whence);用来移动文件读写指针的位置
参数fildes为已打开的 文件描述符,offset为根据参数whence来移动读写位置是的位移数
whence的取值 SEEK_SET (0) 从文件开始处计算偏移量
SEEK-CUR (1) 从文件指针当前位置开始计算偏移量
SEEK_END(2) 从文件结尾处开始计算偏移量
(offset允许取负值)

   #include<unistd.h>#include<stdlib>int len=lseek(fd,-3,SEEK_SET);if(-1==len){        perror("lseek"),exit(-1); 

四、文件属性的操作
1. 查看文件属性,在shell下可通过输入命令 ls -l 来查看
2. 获取文件属性,除了ls还可以通过函数stat()/fstat()/lstat()函数来查看
3. 设置文件属性
hmod/dchmod 用来修改文件的存取权限
chown/fchown/lchown 修改文件的用户id和组id
truncatr/ftruncate 改变文件的大小
utime 改变文件的st_mtime域和st_ctime域,即存取时间和修改时间
umask 设置文件创建时使用的屏蔽字

五、文件的移动和删除
1. int rename(const char* olspath,const char *newpath);
rename会将参数oldpath所指定的文件名称改为newpath所指定的文件名称
2. int unlink(const char *pathname) 删除
int remove(const char *pathname)
注意:目录文件的删除要使用rmdir系统调用
不清楚的函数可以找man那个男人帮忙哦!

阅读全文
0 0