LS8-linux系统调用方式文件编程之学习笔记

linux系统调用方式文件编程
定义/功能:文件描述符
在Linux系统中,所有打开的文件对应一个数字,这个数字由系统分配,称之为:文件描述符。(可类似理解为:省份证号与你本人的关系),通过文件描述符便可以对文件进行操作。

  1. 打开文件
    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:希望读取的字节数

  1. 写文件
    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:要写入数据的字节数

  1. 定位文件
    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);
} 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值