文件编程之系统调用方式

摘要

首先了解文件描述符的概念:在Linux系统中,所有打开的文件对应一个数字,这个数字由系统分配,该数字称为文件描述符。系统调用文件编程时需要用到文件描述符。
与文件编程有关的操作主要有打开文件、创建文件、关闭文件、读文件、写文件、文件定位、复制文件描述符,这些操作的函数可通过系统调用方式使用。相关函数都能在Unix环境高级编程中查找到,在Linux系统中使用man命令能帮助我们详细了解相应函数。

文件编程相关函数及使用

open函数

原型:int open(const char *pathname,int flags);
     int open(const char *pathname,int flags,mode_t mode);
头文件:<sys/types.h><sys/stat.h><fcntl.h>
功能:打开或者创建一个文件,成功返回文件描述符,失败返回-1
参数:pathname:要打开的文件名(含路径)
     flags:文件打开的标志
        O_RDONLY:只读
        O_WRONLY:只写
        O_RDWR:可读可写
以上三选项必须且只能指定一项;以下参数是可选的,与其它选项“位或”得到flags参数
        O_APPEND:每次写时都追加到文件尾端
        O_CREAT:当打开的文件不存在时创建该文件
     mode:当flags中使用了O_CREAT时使用,mode记录了待创建的文件的访问权限。
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
void main()
{
    int fd=open("/root/test1.c",O_RDWR | O_CREAT,0777);
    if(fd<0)
    {
        printf("file open fail!\n");    
    }
    else
    {
        printf("the file descriptor is %d\n",fd);
    }
}

create函数

原型:int creat(const char *pathname, mode_t mode)
头文件:<sys/types.h><sys/stat.h><fcntl.h>
功能:创建一个文件,并以只写的方式打开该文件,成功返回文件描述符,失败返回-1
参数:pathname:创建的文件名(含路径)
     mode:创建的文件的读写权限
void main()
{
    int fd=creat("/root/test1.c",0777);
    if(fd<0)
    {
        printf("file creat fail!\n");   
    }
}

close函数

原型:int close(int fd)
头文件:<unistd.h>
功能:关闭一个打开的文件,成功返回0,失败返回-1
参数:fd:待关闭文件的文件描述符

read函数

原型:ssize_t read(int fd,void *buf,size_t count)
头文件:<unistd.h>
功能:从一个打开的文件读取数据,成功返回读取的字节数,失败-1
参数:fd:要读取的文件的描述符
buf:读取来的文件存放在buf指向的空间
count:希望读取的字节数

write函数

原型:ssize_t write(int fd,void *buf,size_t count)
头文件:<unistd.h>
功能:向一个打开的文件写入数据,成功返回写入到文件里的字节数,失败返回-1
参数:fd:要写入数据的文件的描述符
buf:要写入的数据的存放位置
count:希望写入的字节数

lseek函数

原型:Off_t lseek(int fd,off_t offset,int whence)
头文件:<sys/types.h><unistd.h>
功能:重新定位文件的读写位置,成功返回移动后的文件指针距离文件头的距离,失败返回-1
参数:fd:需要重新定位的文件的描述符
offset:偏移量
whence:该参数可以取SEEK_SET,SEEK_CUR,SEEK_END. SEEK_SET表示文件指针从文件头偏移offset个字节;SEEK_CUR表示文件指针从当前位置偏移offset个字节;SEEK_END表示文件指针从文件尾偏移offset个字节。

每次打开一个文件都有一个与其关联的“当前文件偏移量”。读写操作都从当前文件偏移量处开始,并使偏移量增加读写的字节数。

dup函数

原型:int dup(int oldfd)
头文件:<unistd.h>
功能:复制一个文件描述符,成功返回新的文件描述符,失败返回-1
参数:oldfd:待复制的老的文件描述符

使用例子

/**********************************************
*函数名:test.c
*函数功能:复制一个文件的内容到另一文件
***********************************************/

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
void main(int argc,char *argv[])
{
    int fd_s=open(argv[1],O_RDONLY);
    int fd_t=open(argv[2],O_WRONLY | O_CREAT,0666);
    int count=1;
    char buf[512];
    while(count>0)
    {
        count=read(fd_s,buf,512);
        write(fd_t,buf,count);  
    }
    close(fd_s);
    close(fd_t);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值