Linux文件I/O学习笔记 1
2016-01-24 22:45
507 查看
1、open函数
建立新文件testopen.txt先#include<stdio.h> #include<fcntl.h> #include<sys/types.h> #include<sys/stat.h> #include<unistd.h> int main(int argc, char *argv[]) { int fd; if(argc!=2) { perror("argc!=2"); return -1; } fd = open(argv[1], O_RDONLY); //若文件不存在,创建常用方法 //fd = open(argv[1], O_RDWR|O_CREAT|O_TRUNC,0655) printf("fd = %d\n", fd); close(fd); return 0; } 执行: gcc openFunc.c -o open ./open testopen.txt fd = 3
2、creat函数
创建一个文件因以只写方式打开创建的文件,故现用方式:
open(path, O_RDWR|O_CREAT|O_TRUNC, mode)
成功返回文件描述符,出错返回-1
3、close函数
close(fd);
成功返回0,失败返回-1。
4、lseek函数
显式地为一个 打开文件 设置偏移量#include <unistd.h> off_t lseek(int fd, off_t offset, int whence);
成功返回新的文件偏移量,失败返回-1
若lseek成功执行,则返回新的文件偏移量,确定当前偏移量:
off_t currpos; currpos = lseek(fd, 0 , SEEK_CUR);
注意:
普通文件的当前偏移量必须非负值,部分设备允许负值,比较lseek文件偏移量时不要测试它是否小于0,要测试它是否等于-1.
文件偏移量可以大于文件的当前长度,下次写将加长文件长度,在文件中构成空洞。超出文件尾端后,则不分配磁盘块。
5、read函数
从打开的文件中读数据#include<unistd.h> ssize_t read(int fd, void *buf, size_t nbytes);
返回值:读到的字节数,若已到文件尾,返回0;出错,返回-1
6、write函数
向打开文件写数据#include<unistd.h> ssize_t write(int fd, const void *buf, size_t nbytes)
返回值:成功,返回已写字节数;出错,返回-1。
常见出错原因:磁盘写满,或者超过一个给定进程的文件长度限制。
对于普通文件,写操作从文件当前偏移量开始。如果在打开文件时,指定了
O_APPEND选项,则在每次写操作之前,将文件偏移量设置在文件的当前结尾处。
一次成功写之后,文件偏移量增加实际写的字节数。
7、使用write和read复制文件
#include "apue.h" #define BUFFSIZE 4096 int main(void) { int n; char buf[BUFFERSIZE]; while((n = read (STDIN_FILENO, buf , BUFFERSIZE))>0) { if(write(STDOUT_FILENO, buf , n) != n) { err_sys("write error!\n"); } } if(n<0) { err_sys("read error!\n"); } exit(0); }
相关文章推荐
- Linux学习
- Linux搭建SVN 服务器
- Linux学习笔记:MySQL主从同步
- CentOS 6.4 编译安装LLVM3.3,Clang和Libc++
- Linux输入子系统(Input Subsystem)
- Linux下FTP服务器的实现(仿vsftpd)
- 黑客专用 Linux 发行版 Kali Linux 发布了首个滚动更新版 2016.1
- VmWare下CentOS 6.3 磁盘空间满处理操作
- GStreamer部署-Linux(ubuntu14.04)(已测试)
- Windows下用Bochs编译运行Linux-0.11
- rootfs常见文件格式解释
- linux gdb调试器
- Linux 2015 年最热门的 10 篇技术文章
- linux gvim configuration
- LINUX 添加右键打开终端快捷方式
- linux两种启动过程分析
- 安全威胁无孔不入:基于Linux系统的病毒(转)
- CentOS7安装Hadoop2.7完整流程
- Centos安装后,没有ifconfig工具
- 在Linux上编译TCMalloc