Linux C文件IO (1)
来源:互联网 发布:羽绒服 知乎 编辑:程序博客网 时间:2024/05/02 02:28
一.创建/打开文件
函数原形:
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode)int creat(const char *pathname, mode_t mode);
参数:
@pathname 打开或创建文件的名字
@flags 可多选
flags 常用选项:
O_RDONLY 只读方式打开
O_WRONLY 只写方式打开
O_RDWR 读写方式打开
O_CREAT 如果文件不存在就创建
O_APPEND 每次写都追加到文件尾
O_EXCL 如果同时指定了O_CREAT,文件已存在则报错(可用来判断文件是否存在)
O_TRUNC 如果文件存在,且为只写或读写方式成功打开,则将其长度截断为0。(可用于清空文件内容)
@mode 文件的权限位(只有在flags中有O_CREAT选项时文件权限才有效)
S_IRWXU 允许 文件的属主读 , 写和执行文件
S_IRUSR (S_IREAD) 允许文件的属主读文件
S_IWUSR (S_IWRITE) 允许文件的属主写文件
S_IXUSR (S_IEXEC) 允许文件的属主执行文件
S_IRWXG 允许文件 所在的分组读 , 写和执行文件
S_IRGRP 允许文件所在的分组读文件
S_IWGRP 允许文件所在的分组写文件
S_IXGRP 允许文件所在的分组 执行文件
S_IRWXO 允许其他用户读 , 写和执行文件
S_IROTH 允许其他用户读 文件
S_IWOTH 允许其他用户写 文件
S_IXOTH 允许其他用户执行 文件
返回值:成功返回文件描述符,失败返回 -1
二.关闭文件
函数原形:
#include <unistd.h>int close(int fd);
参数:fd 文件描述符
返回值:成功返回 0,失败返回 -1
三.文件偏移量
函数原形:
#include <sys/types.h>#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);
参数:offset与whence有关
当whence是SEEK_SET,则将该文件偏移量设置为距离文件开始出offset个字节处
当whence是SEEK_CUR,则将该文件偏移量设置为其当前值加offset,offset可为正或负
当whence是SEEK_END,则将该文件偏移量设置为文件长度加offset,offset可为正或负(文件偏移量可以大于文件长度)
返回值:成功返回新的文件偏移量,失败返回 -1
备注:管道 FIFO 网络套接字 描述符不可设置偏移量
四.写文件
函数原形:
#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);
参数:fd 文件描述符 ,buf 缓冲区,count 读去的大小不超过SSIZE_MAX
返回值:成功返回写的字节数,失败返回 -1
五.读文件
函数原形:
#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);
参数:fd 文件描述符 ,buf 缓冲区,count 读去的大小不超过SSIZE_MAX
返回值:读到的字节数,如果读到文件尾返回0,出错返回 -1
示例代码:
/************************************************************************* > File Name: base-file.c > Author: > Mail: > Created Time: 2017年03月08日 星期三 14时09分46秒************************************************************************/#include <stdio.h>#include <fcntl.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <sys/stat.h>#include <sys/types.h>/* 错误处理 */void err_exit(const char *s){ perror(s); exit(EXIT_FAILURE);}int main(void){int fd; // 文件描述符char rdbuf[10]; // 读缓冲区char wrbuf[1024]; // 写缓冲区/* 只写方式打开文件,如果文件不存在创建文件,文件权限644 */ if ((fd = open("test", O_WRONLY|O_APPEND|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH)) == -1) err_exit("open");/* 写文件 */strcpy(wrbuf, "abc1234854defgABCDEFG123456gg");if (write(fd, wrbuf, strlen(wrbuf)) == -1) err_exit("write");/* 关闭文件 */close(fd);/* 只读方式打开文件 */if ((fd = open("test", O_RDONLY)) == -1) err_exit("open");/* 读文件 */int size = 1, i = 0;while (1){ size = read(fd, rdbuf, 10); if (size == 0) break; if (size == -1) err_exit("read"); for (i=0; i<size; i++) { printf("%c", rdbuf[i]); }}printf("\n");/* 关闭文件 */close(fd);return 0;}
- Linux C文件IO (1)
- linux c编程 文件IO
- Linux C 文件IO (2)
- Linux C 文件IO操作
- linux C IO 小结1
- linux c 基础学习总结之文件IO
- linux c语言学习笔记之文件IO
- Linux C编程之IO-文件拷贝
- C中的文件IO
- C文件IO
- C的文件IO
- c语言-文件io
- C/C++文件IO
- C语言 文件IO
- C笔记 文件IO
- C++IO文件流
- 1 Linux io文件操作总结
- Linux 文件IO理解
- tomcat 优化 jvm 解决方法
- 图像特征提取
- MySQL主主数据同步
- Android Studio使用@hide的API时的问题
- POJ 2485 Highways (Prime)
- Linux C文件IO (1)
- 【tomcat】MacOS安装Tomcat并部署spring-boot项目
- IT常用网站
- EL表达式的判断
- repo和git的基本用法
- 命令行编译运行java
- 用python玩转数据|基本语法
- [codevs2596]售货员的难题
- 位运算