LINUX期末复习---文件处理

来源:互联网 发布:mac电池校正 编辑:程序博客网 时间:2024/05/18 02:30

一、LINUX文件结构

①文件
  为操作系统服务、设备访问提供了简单而统一的接口。文件数据结构包括文件名字、创建日期、访问权、文件长度等,这些数据都保存在我们称之为 节点 中。
②设备
  硬件在LINUX/UNIX中通常是被映射成文件的,这在嵌入式当中是十分重要的。
  几个重要的设备文件:
  one: /dev/console 代表的是系统控制台。
  two: /dev/tty 是进程控制终端。
  three: /dev/null 空设备。
③目录
  一种保存节点号和其他文件名字的特殊文件,通常只能拖过opendir 和 readdir来操作。

二、系统调用

定义:对文件和设备进行访问和控制的函数调用被称为系统调用,它有LINUX直接提供,是通向操作系统本身的操作接口。
不足:系统调用会降低计算机的执行性能。因为用户空间和内核空间处于不同的空间,系统调用会在用户程序和内核代码之间来回切换,系统开销很大。一般由库函数来间接调用。

①open
cut2
举例:file = open("stu.info ", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
说明: O_RDWR:以读写方式打开文件。
         O_CREAT:按mode中给的访问模式创建文件。
          S_IRUSR:文件的属主用户有读权限
          S_IWUSR:文件的属主用户有写权限

②close
举例:close(具体的文件描述符);

③read
cut3
举例1
char bud[20];
printf(“The value read returned %d ./n”,res=read(0,buf,20));//标准输入
buf[res]=’/0’;
printf(“%s”,buf);
举例2
typedef struct
{
char stu_num[12];
char name[10];
short int sex;//for 0 is female ,1 is male
char mobile_phone[12];
} stu_info;
read(file,&record,sizeof(record));

④write
cut4 

举例1
if(write(1,”hellloworld/n”,sizeof(“hellloworld/n”)) != sizeof(“hellloworld/n”))
    printf(“Error!”);//标准输出
举例2
write(file,&record,sizeof(record));

⑤ioctl(嵌入式LINUX对设备的配置)
cut5

⑥lseek
cut6

⑦目录相关函数
cut7
说明:
lstat:获取一些文件相关的信息
readdir:注意它的返回值,需要定义结构体,struct dirent *pDirent
vStat.st_mode:它的使用需要配上特定的宏,作用是文件权限和文件类型信息

三、库函数

①文件操作举例

cut8 cut9

cut10 cut11 ②内存映射
f = open("records.dat",O_RDWR);
mapped = (RECORD *)mmap(0, NRECORDS*sizeof(record), //映射进内存
         PROT_READ|PROT_WRITE, MAP_SHARED, f, 0);
mapped[43].integer = 243;
sprintf(mapped[43].string,"RECORD-%d",mapped[43].integer);
msync((void *)mapped, NRECORDS*sizeof(record), MS_ASYNC);//映射文件写入磁盘
munmap((void *)mapped, NRECORDS*sizeof(record));// 调用munmap解除映射
close(f);