您的位置:首页 > 编程语言

文件编程之系统调用方式

2015-08-02 22:19 344 查看

摘要

首先了解文件描述符的概念:在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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: