预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共32页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

LINUX系统编程 LINUXLINUX系统编程系统编程 信息科学与工程学院付冲 LINUX系统编程 第三讲Linux文件系统程序设计 例1:使用umask 例2:使用open和close 例3:使用read,write 例4:使用fstat 例5:使用ftruncate,lseek,fsync 例6:用fcntl进行文件锁操作 例7:使用dup2重定向stdout LINUX系统编程 例1:使用umask 文件的权限位定义: 0位(最低位):其它用户执行权限位 1位:其它用户写权限位 2位:其它用户读权限位 3位:同组用户执行权限位 4位:同组用户写权限位 5位:同组用户读权限位 6位:文件所有者执行权限位 7位:文件所有者写权限位 8位:文件所有者读权限位 LINUX系统编程 进程的umask 进程的umask是新创建的文件、目录应关闭的访问 权限位的位掩码。 例:0222表示关闭文件主(创建文件的进程的用 户)、同组用户、其它用户的写权限。为1的位表示 对应权限关闭。 LINUX系统编程 系统调用umask #include<sys/stat.h> mode_tumask(mode_tnewmask); 功能:修改进程的umask,设置为newmask,并将原 来的umask返回。 LINUX系统编程 例1使用umask 程序名称:newmask.c LINUX系统编程 例2:使用open和close 使用的系统调用 open creat close LINUX系统编程 open #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> intopen(constchar*pathname,intflags); 功能:打开文件,将文件控制块调入内存,为文件读 写做好准备 参数: pathname:文件路径,含文件名 flags:标志 LINUX系统编程 open flags:标志 O_RDONLY:只读 O_WRONLY:只写 O_RDWR:读写 O_CREAT:创建 O_EXCL:创建时使用,若文件已存在时创建失败 O_NOCTTY:不常用,打开终端文件时的选项 O_TRUNC:若文件存在,文件长度置0 O_APPEND:文件指针初始化为文件末尾 O_NONBLOCK:使读操作不阻塞 O_SYNC:写操作时不缓冲,直接写入磁盘 LINUX系统编程 open 返回值:成功时返回文件描述符,失败返回-1并设置 errno。 文件描述符:整数,文件占用的进程打开文件表表目 序号。 LINUX系统编程 creat #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> intcreat(constchar*pathname,intflags,mode_tmode) 功能:创建文件。相当于open(pathname, O_CREAT|O_TRUNC|O_WRONLY,mode); mode指出文件权限 LINUX系统编程 close #include<unist.d> intclose(intfd); 功能:关闭文件,即将修改过的文件内容、文件控制块 内容写回磁盘。 LINUX系统编程 例2:使用open和close 程序名称:fdopen.c LINUX系统编程 例3:使用read,write 使用的系统调用 read write LINUX系统编程 read #include<unistd.h> ssize_tread(intfd,constvoid*buf,size_tcount); 功能:读文件 buf:读到的文件内容存入buf指向的缓冲区 count:期望读到的字节数 从文件指针指向位置开始读,读操作完成后文件指针 后移count个字节。 返回值:实际读到的字节数 出错时返回-1,并设置errno 遇到文件末尾返回0 LINUX系统编程 write #include<unistd.h> ssize_twrite(intfd,constvoid*buf,size_tcount); 功能:写文件 buf指向位置开始的count个字节写入文件中文件指针 指向位置开始处。 写操作完成后文件指针后移count个字节 返回值为实际写入文件的字节数。 调用失败返回-1,并设置errno。 LINUX系统编程 例3:使用read,write 程序名称:fdread.c LINUX系统编程 例4:使用fstat #include<sys/stat.h> #include<unistd.h> intfstat(intfd,structs