LS8-linux系统调用方式文件编程之学习笔记
来源:互联网 发布:plc编程招聘东莞 编辑:程序博客网 时间:2024/05/22 14:09
linux系统调用方式文件编程
定义/功能:文件描述符
在Linux系统中,所有打开的文件对应一个数字,这个数字由系统分配,称之为:文件描述符。(可类似理解为:省份证号与你本人的关系),通过文件描述符便可以对文件进行操作。
- 打开文件
1.1 函数名(功能+UNIX环境高级编程手册)
open
1.2 函数原形(终端man命令:man 2 open)
int open(const char *pathname, int flgs );int open(const char *pathname, int flgs, mode_t mode );
1.3 函数功能
打开或创建一个文件
1.4 所属头文件
#include <sys/type.h>#include <sys/stat.h>#include <fcntl.h>
1.5 返回值
成功:返回文件描述符;失败:-1
1.6 参数说明
pathname:包含路径的文件
flags:
1. O_RDONIY ——
2. O_WRONIY ——
3. O_RDWR ——
a. O_APPEND ——以追加的方式打开文件:不删除文件里原有数据
b. O_CREAT ——当打开文件不存在时,创建该文件
mode:打开文件的读写权限设置(通过man命令获得)。以打开方式创建文件时,必须加上,否则可不定义
2. 创建文件
2.1 函数名(功能+UNIX环境高级编程手册)
creat
2.2 函数原形(终端man命令:man 3 gmtime)
Int creat(const char *pathname, mode_t mode);
2.3 函数功能
创建文件,以只写的方式打开文件
2.4 所属#include
#include <unistd.h>
5.5 返回值
成功:0
失败:-1
5.6 参数说明
fd:待关闭文件的文件描述符
4. 读取文件
4.1 函数名(功能+UNIX环境高级编程手册)
read
4.2 函数原形(终端man命令:man read)
size_t read(int fd, void *buf, size_t count);
4.3 函数功能
从一个打开的文件读取数据
4.4 所属头文件
#include <unistd.h>
1.5 返回值
成功:读取数据的字节数
失败:-1
4.6 参数说明
fd:要读取文件的描述符
buf:读取来的数据存在buf指向的空间
count:希望读取的字节数
- 写文件
5.1 函数名(功能+UNIX环境高级编程手册)
write
5.2 函数原形(终端man命令:man write)
size_t write(int fd, void *buf, size_t count);
5.3 函数功能
向一个打开的文件写入数据
5.4 所属头文件
#include <unistd.h>
5.5 返回值
成功:写入文件的字节数
失败:-1
5.6 参数说明
fd:要写入文件的描述符
buf:要写入文件的数据
count:要写入数据的字节数
- 定位文件
6.1 函数名(功能+UNIX环境高级编程手册)
lseek
6.2 函数原形(终端man命令:man lseek)
off_t lseek(int fd, off_t offset, int vhence);
6.3 函数功能
重新定位文件读写位置
6.4 所属头文件
#include <sys/types.h>#include <unistd.h>
6.5 返回值
成功:移动后的文件指针距离文件头的字节数(位置)
失败:-1
6.6 参数说明
fd:要写入文件的描述符
offset:要移动的偏移量
whence:移动的初始位置
SEEK_SET:文件头
SEEK_CUT:当前位置
SEEK_END:文件尾
7. 复制文件描述符
7.1 函数名(功能+UNIX环境高级编程手册)
dup
7.2 函数原形(终端man命令:man write)
int dup(int oldfd) ;
7.3 函数功能
复制一个文件描述符
7.4 所属头文件
#include <unistd.h>
7.5 返回值
成功:返回新的文件描述符
失败:-1
7.6 参数说明
oldfd:要复制文件的描述符
示例:将一个文件的数据复制到另一个文件里
流程:
1. 打开源文件
2. 打开目标文件
3. 读取源文件数据写入目标文件
代码:
#include <sys/type.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>void main(int argc, char **argv[]){ int fds; int fdt; char buf[512]; size_t count=0; /*open source file*/ fds = open(argv[1],O_EDONLY); /*open target file*/ fdt = open(arg[2],O_RDONLY|O_CREAT,0666); /*read source data and write to target file*/ while((count = read(fds,buf,512)>0) write(fdt,buf,count); close(fds); close(fdt);}
综合实例代码:
#include <stdio.h>#include <sys/type.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>int main(){ int fdo; int fdc; char rbuf1[20]; char rbuf2[20]; char wbuf1[10] = "0123456789"; char wbuf2[10] = "9876543210"; size_t count1 = 0; size_t count2 = 0; /*open file*/ fdo = open("/home/open.c",RDWR); //fdo = open("/home/open.c",RDWR|O_CREAT,0666); if(fdo<0) printf("open file is failure!\n"); /*creat file*/ fdc = creat("/home/creat.c",0621); if(fdc<0)printf("creat file is failure!\n"); /*write data to file*/ count1 = strlen(wbuf1); count2 = strlen(wbuf2); write(fdo,wbuf1,count1); write(fdc,wbuf2,count2); /*positioning file pointer */ lseek(fdo,0,SEEK_SET); //lseek(fdc,0,SEEK_SET); /*read data from file*/ read(fdo,rbuf1,10); rbuf1 = '\0'; printf("rbuf1 is %s\n",rbuf1); read(fdc,rbuf2,10); rbuf2 = '\0'; printf("rbuf2 is %s\n",rbuf2); close(fdo); close(fdc);}
- LS8-linux系统调用方式文件编程之学习笔记
- Linux应用程序开发笔记->文件编程之系统调用方式相关函数
- 文件编程之系统调用方式
- 文件编程:系统调用方式
- 文件编程:系统调用方式
- 系统调用方式文件编程
- 系统调用方式文件编程
- Linux学习之库函数方式文件编程
- Linux系统编程之基本概念--学习笔记
- LINUX文件编程-系统调用
- linux文件编程-系统调用
- Linux文件编程--系统调用
- 【Linux系统调用】文件编程
- Unix环境编程学习笔记------查看系统调用号文件
- 文件编程之系统调用
- 文件编程之系统调用
- linux应用编程学习(2)系统调用文件类
- Linux文件编程之【系统调用】——绪论
- Misha and Changing Handles
- 除Hadoop外你还需要知道的9个大数据技术
- 数据结构学习之路3 堆栈的基本操作
- 学习笔记TF033:实现ResNet
- 最短路
- LS8-linux系统调用方式文件编程之学习笔记
- Vue实现组件信息的缓存
- 函数
- 使用NLPIR 进行中文分词并标注词性
- Apache Kylin在电信运营商的实践和案例分享
- map集合遍历的两种方式,在spring中的依赖注入
- POJ.3087 Shuffle'm Up (模拟)
- STM32网络丢包问题分析
- Linux--多线通信