您的位置:首页 > 运维架构 > Linux

Linux编程常用的函数(九) 文件访问

2008-01-22 15:18 225 查看
(九)文件访问

1. #include<fcntl.h>
int open(const char *pathname, int oflag, …)//打开或创建文件
若成功返回文件描述符,出错返回-1;参数说明:
pathname:要打开或创建文件的名字
oflag:以下三个只选其一:
O_RDONLY(只读打开)、O_WRONLY(只写打开)、O_RDWR(读写打开)
以下可选:
O_APPEND 每次写时都追加到文件的尾端
O_CREAT 若此文件不存在,则创建它(需第三个参数来指定权限)
O_EXCL 如果同时指定了CREAT而文件已经存在则出错。
O_TRUNC 如果此文件存在而且为只写或只读,则将其长度截为0
O_NOCTTY 如果pathname指的是终端设备,则不将该设备分配作为此进程的控制终端。
O_NONBLOCK 如果pathname指的是一个FIFO、一个块特殊文件或一个字符特殊文件,则此选项为文件的本次打开操作和后续的I/0操作设置非阻塞模式
O_DSYNC 使每次write等待物理I/0操作完成,但是如果写操作并不影响读取刚写入的数据,则不等待文件属性被更新。
O_RSYNC 使每一个以文件描述符作为参数的read操作等待,直至任何对文件同一部分进行的未决写操作都完成
O_SYNC 使每次write都等到物理I/O操作完成,包括由write操作引起的文件属性更新所需的I/0。

2.creat(const char *pathname, mode_t mode);//创建文件
若成功返回只写打开的文件描述符,失败返回-1
相当于open(pathname, O_WRONLY | O_CREAT | O_TRUNC,mode)
mode的选项:
S_IRUSR // user-read(文件所有者读)
S_IWUSR // user-write(文件所有者写)
S_IXUSR // user-execute(文件所有者执行)
S_IRGRP // group-read
S_IWGRP // group-write
S_IXGRP // group-execute
S_IROTH // other-read
S_IWOTH // other-write
S_IXOTH // other-execute
3.int close(int filedes)//关闭打开的文件;成功返回0,失败返回-1
4.off_t lseek(int filedes, off_t, int whence)
//为一个打开的文件设置其偏移量,成功返回新的文件偏移量 出错返回-1
若whence是SEEK_SET,则将该文件的偏移量设置为距文件开始处offset个字节
若whence是SEEK_CUR,则将该文件的偏移量设置为当前值加offset(可正、负)
若whence是SEEK_END,则将该文件偏移量设置为文件长度加offset(可正、负)
5.ssize_t read(int filedes, void *buf, size_t nbytes);//从打开的文件中读数据;成功返回读到的字节数,若已到文件结尾则返回0,出错返回-1
6.ssize_t write(int filedes, const void *buf, size_t nbytes)
//向打开的文件写数据;若成功则返回已写的字节数,出错则返回-1
7.ssize_t pread(int filedes, void *buf, size_t nbytes, off_t offset);
//指定偏移量读文件;返回读到的字节数,已到文件结尾返回0,出错返回-1
8.ssize_t pwrite(int filedes, void *buf, size_t nbytes, off_t offset);
//指定偏移量写文件;返回写入的字节数,若出错则返回-1
9.int dup(int filedes);//复制一个现存的文件描述符
int dup2(int filedes, int filedes2)//将filedes复制到filedes2
//若成功则返回新的文件描述符,若出错则返回-1
10.#include<fcntl.h>
int fcntl(int filedes, int cmd, …);//改变已打开的文件的性质
若成功则依赖cmd,若出错则返回-1,主要有5种功能:
(1)复制一个现有的描述符(cmd = F_DUPFD)
复制文件描述符filedes,返回新文件描述符
(2)获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD)
返回文件描述符标记(F_GETFD)
(3)获得/设置文件状态标志(cmd=F_GETFL或F_SETFL)
返回文件状态标志(前面提到过,如O_RDONLY)
(4)获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN)
(5)获得/设置记录锁(cmd=F_GETLK、F_SETLK或F_SETLKW)
11.#include<unistd.h> #include<sys/ioctl.h> #include<stropts.h>
int ioctl(int filedes, int request,…);//通用I/O操作
失败返回-1,成功返回其他值
12.#include<sys/stat.h>
int stat(const char *restrict pathname, struct stat *restrict buf)
//返回与此命名有关的信息结构
int fstat(int filedes, struct stat *buf);//获取已在filedes上打开的文件的有关信息
int lstat(const char *restrict pathname, struct stat *restrict buf);//返回该符号链接的有关信息 三个函数的返回值:成功0失败-1
struct stat{
mode_t st_mode; //文件的类型和权限
ino_t st_ino;//i节点号
dev_t st_dev;//设备号
dev_t st_rdev;//特殊文件的设备号
nlink_t st_nlink;//链接号
uid_t st_uid;//拥有者的用户ID
gid_t st_gid;//拥有者的组ID
off_t st_size;//文件的大小
time_t st_atime;//上次访问的时间
time_t st_mtime;//上一次修改文件的时间
time_t st_ctime;//上一个改变文件状态的时间
blksize_t st_blksize;//最优I/O块大小
blkcnt_t st_blocks;//分配的硬盘块号码
};
13.int access(const char *pathname, int mode);//测试文件的访问权限
成功返回0,失败返回-1;mode有如下几个选项:
R_OK 测试读权限 W_OK测试写权限 X_OK测试执行权限 F_OK 测试文件是否存在
14.#include <sys/stat.h> mode_t umask(mode_t cmask); //返回原来的屏蔽字
15.#include <sys/stat.h> int chmod(const char *pathname, mode_t mode);
int fchmod(int filedes, mode_t mode);//更改文件的访问权限,成功返回0,失败返回-1
mode的选项除了以上的9个权限之外,还有:S_ISUID 执行时设置用户ID S_ISGID 执行时设置组ID S_ISVTX 保存正本(粘住位) S_IRWXU 用户读写执行 S_IRWXG 组读写执行
16.int chown(const char *pathname, uid_t owner, gid_t group);
int fchown(int filedes, uid_t owner, gid_t group);
int lchown(const char *pathname ,uid_t owner, gid_t group);
//更改文件的用户ID和组ID;成功返回0,失败返回-1
17.int truncate(const char *pathname, off_t length);
int ftruncate(int filedes, off_t length);//截短文件 成功返回0出错返回-1
18.int link(const char *existingpath, const char *newpath);
//在目录existingpath下创建新目录newpath,成功返回0失败返回-1
19.#include<unistd.h>int unlink(const char *pathname)//删除目录,成功0失败返回-1
20.#include <stdio.h>int remove(const char *pathname);//删除目录,成功返回0失败返回-1
21.int rename(const char *oldname, const char *newname);//更改文件名,成功返回0失败-1
22.#include<utime.h> int utime(const char *pathname, const struct utimbuf *times);
//更改文件的访问和修改时间;成功返回0,失败-1
struct utimbuf {
time_t actime; //访问时间
time_t modtime;//修改时间
}
23.#include <sys/stat.h> int mkdir(const char *pathname, mode_t mode);//创建文件(0/-1)
24.int rmdir(const char *pathname);//删除文件 (0/-1)
25.#include <unistd.h>int chdir(const char *pathname);
int fchdir(int filedes);//更改当前的工作目录 返回值:(0/-1)
26.char *getcwd(char *buf, size_t size );//获取当前工作目录的绝对路径名 返回值(buf/NULL)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: