Linux下的文件操作总结
来源:互联网 发布:跑跑卡丁车淘宝依依 编辑:程序博客网 时间:2024/04/28 05:32
"In Linux, everything is a file." --- <<Beginning Linux Programming>>
3个主要的文件描述符:
0: 标准输入
1: 标准输出
2: 标准错误
基本文件操作
write:
函数声明:ssize_t write(int fildes, const void *buf, size_t nbytes);
函数功能:把从buf开始的nbytes个字节写入描述符为fildes所关联的文件中。
返回值: 返回实际写入的字节数。返回值可能小于nbytes。如果返回0则
没有数据写入;如果返回-1则表示有错误发生。
read:
函数声明:ssize_t read(int fildes, void *buf, size_t nbytes);
函数功能:把描述符为fildes所关联的文件中的nbytes个字节写入buf中。
返回值: 返回实际读入的字节数,可能小于nbytes。如果返回0则表示
没有数据读入;如果返回-1则表示有错误发生。
open:
函数声明:int open(const char *path, int oflags);
int open(const char *path, int oflags, mode_t mode);
函数功能:以oflags为存取模式,打开path所指向的文件,返回该文件的文件
描述符。oflags可以是:(其他值请参考 man 2 open)
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读和写
O_APPEND 在文件的末尾添加
O_TRUNC 丢弃已经存在的内容,将文件长度置0
O_CREAT 创建文件,可以用mode参数指明权限
这些值可以用“或”操作连接起来,如:O_CREAT|O_WRONLY|O_TRUNC。
mode参数可以设置新建文件的访问权限:
S_IRUSR 读,文件所有者
S_IWUSR 写,文件所有者
S_IXUSR 执行,文件所有者
S_IRGRP 读,文件所有者所在的组
S_IWGRP 写,文件所有者所在的组
S_IXGRP 执行,文件所有者所在的组
S_IROTH 读,其他人
S_IWOTH 写,其他人
S_IXOTH 执行,其他人
mode参数也可以用“或”连接,如open("myfile",O_CREAT,S_IRUSR|S_IXOTH),
则文件myfile的权限为-r-------x。
返回值: 文件描述符(非负整数),如果失败则返回-1。
close:
函数声明:int close(int fildes);
函数功能:关闭文件描述符。
返回值: 0表示成功,-1表示失败。
ioctl:
函数声明:int ioctl(int fildes, int cmd, ...);
函数功能:向设备写入控制信息。
返回值: -1表示出错。
例子:
lseek:
函数声明:off_t lseek(int fildes, off_t offset, int whence);
函数功能:对文件描述符fildes设置读写位置。offset设置读写位置,
whence设置offset如何用。whence可以为如下值:
SEEK_SET offset为绝对位置(文件开始的相对位置)
SEEK_CUR offset为当前位置的相对位置
SEEK_END offset为文件结尾的相对位置
返回值: 文件指针相对于文件开始的位置。
fstat, stat, and lstat:
函数声明:int fstat(int fildes, struct stat *buf);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);
函数功能:fstat返回文件描述符fildes所关联文件的信息;stat、lstat
返回已命名文件的信息;如果是符号链接,lstat返回符号
链接本身的信息,而stat则返回符号链接所引用文件的信息。
所返回的文件信息存储在结构体指针buf所指向的空间中。
关于结构体stat的信息请参阅man 2 stat。
返回值: 如果成功则返回0,否则返回-1。
dup and dup2:
函数声明:int dup(int fildes);
int dup2(int fildes, int fildes2);
函数功能:返回不同的文件描述符访问同一个文件。dup返回fildes
所关联文件的一个新文件描述符;dup2创建fildes的一个
副本。它们通常用于读写同一个文件的不同位置,也用于
多个进程通过管道进行通信。
返回值: 如果出错则返回-1。
标准I/O库
参见C语言教程。
文件流和文件描述符
每一个文件流都和底层的一个文件描述符相关联,你能混合使用它们。
int fileno(FILE *stream);
FILE *fdopen(int fildes, const char *mode);
fileno返回文件文件流stream的文件描述符,如果出错则返回-1;
fdopen为文件描述符fildes创建文件流。fildes必须为已打开的。
fdopen和fopen除了第一个参数不一样,其他都一样。
文件和目录的维护
改变权限:int chmod(const char *path, mode_t mode);
改变所有者:int chown(const char *path, uid_t owner, gid_t group);
unlink, link, and symlink:
函数声明:int unlink(const char *path);
int link(const char *path1, const char *path2);
int symlink(const char *path1, const char *path2);
函数功能:unlink删除目录下的文件,如果是硬链接则还将链接数减1.
link创建path2,path2为path1的硬链接。
symlink创建path2,path2为path1的软链接。
返回值: 成功返回0,失败返回-1。
mkdir and rmdir:
函数声明:int mkdir(const char *path, mode_t mode);
int rmdir(const char *path);
函数功能:mkdir创建权限为mode的目录。
rmdir删除目录,只有当path为空目录时才能删除。
返回值: 成功返回0,失败返回-1。
chdir and getcwd:
函数声明:int chdir(const char *path);
char *getcwd(char *buf, size_t size);
函数功能:chdir改变程序运行的的当前目录。
把程序运行的当前目录写入buf,目录名的长度不能超过size。
返回值: 成功返回0,失败返回-1。
扫描目录
用DIR结构对目录操作,DIR*称为目录流(如同FILE*称为文件流一样)
opendir
函数声明:DIR *opendir(const char *name);
函数功能:opendir打开一个目录。
返回值: 成功则返回一个DIR结构的指针,失败返回NULL。
readir
函数声明:struct dirent *readdir(DIR *dirp);
函数功能:在dirp中返回下一个目录入口。
返回值: 目录入口信息(man dirent)。如果出错或到达目录结尾,
则返回NULL。
telldir
函数声明:long telldir(DIR *dirp);
函数功能:返回目录流dirp中的当前位置。
返回值:
seekdir
函数声明:void seekdir(DIR *dirp, long loc);
函数功能:设置dirp中的目录入口指针,loc表示指针的位置。
返回值: 无
closedir
函数声明:int closedir(DIR *dirp);
函数功能:关闭目录流。
返回值: 成功返回0,失败返回-1。
例子:
高级话题
内存映射函数(mmap)设置一段内存空间,这段空间可以被多个程序读写。
mmap也可以用来操作文件,它可以使文件的整个内容看起来像内存中的数组一样。
函数声明:void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
函数功能:(man mmap)fildes为文件描述符;off指定映射的文件的起始位置;len指定要
映射的长度(也就是内存段的长度);prot指定这段内存的
存取权限,prot可为以下值(可以用or连接):
PROT_READ 可读
PROT_WRITE 可写
PROT_EXEC 可执行
PROT_NONE 该内存段不能存取
flags设置这段内存的控制信息,MAP_PRIVATE为私有的,MAP_SHARED为共享的。
MAP_SHARED可以使对这段内存的修改反映到文件中。addr指定这段内存空间的
起始地址,如果为0则由系统自动分配(推荐)。
返回值: 如果成功则返回这段内存空间的其实地址,失败返回MAP_FAILED。
- Linux下的文件操作总结
- linux下对sh文件的基本操作总结
- Linux下应用程序的文件操作函数总结
- linux下对sh文件的基本操作总结
- Linux下应用程序的文件操作函数总结
- linux下对sh文件的基本操作总结
- linux下对sh文件的基本操作总结
- Linux下常用文件操作命令总结
- linux文件操作总结(下)
- Linux下的文件操作
- linux 下的文件操作
- Linux 下的文件操作
- linux下的文件操作
- linux下的文件操作
- LINUX下的文件操作
- Linux 文件操作总结
- linux文件操作总结
- Linux 文件操作总结
- 正则表达式的g m $ ^ i
- ORACLE UPDATE 语句语法与性能分析
- ASP.NET关闭当前窗口同时打开一个新窗口
- 位运算
- c++资源之不完全导引 (收藏)
- Linux下的文件操作总结
- 破解flowplayer
- 以下是关于二叉树操作的11个简单算法
- Linux 安装 Mysql
- VS2005调试asp.net程序时出现----Internet Explorer 无法显示该页面
- 如何设置Visua Studio 2005 默认开发环境?
- LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol(转)
- 太神奇了 居然有牛人开发了中文的汇编语言IDE 特发此贴宣传广大
- 如何修改电脑背景颜色??