一、linux实现文件操作有两种方式:
1.系统调用方法;
2.库函数实现。
下面详细介绍两种方式。
(1)系统调用
int open(const char *pathname, int flags)
int open(const char*pathname, int flags, mode_t mode)
入参:pathname:路径
flags:打开方式(O_RDONLY,O_WRONLY,O_RDWR),另外可以附加选项(O_CREAT)
返回值:0:正确; -1:错误。
off_tlseek(int fildes, off_t offset, int whence)
入参:fildes:文件描述符;
offset:偏移量;
whence:设定从文件哪里开始偏移,通常可取如下(SEEK_END:文件尾, SEEK_SET:文件开头,SEEK_CUR:当前文件)
返回值:成功时返回目前读写文职,即距离文件开头多少字节。错误时返回-1.
size_t read(int fd, void *buf, size_t count)
size_t write(int fd, void *buf ,size_t count)
入参:fd:文件描述符;
buf:存入或读取数据缓冲区;
count:大小
返回值:读取或写数据大,错误时返回-1.
举例:实现文件复制功能
<pre class="objc" name="code">int main(int argc,char **argv)
{
int from_fd,to_fd;
int ret =1;
long file_len=0;
char buffer[BUFFER_SIZE];
char *ptr;
/*判断入参*/
if(argc!=3)
{
printf("Usage:%s fromfile tofile\n",argv[0]);
exit(1);
}
/* 打开源文件 */
if((from_fd=fopen(argv[1],"rb"))==-1)
{
printf("Open %s Error\n",argv[1]);
exit(1);
}
/* 创建目的文件 */
if((to_fd=fopen(argv[2],"wb"))==-1)
{
printf("Open %s Error\n",argv[2]);
exit(1);
}
/*测得文件大小*/
file_len=lseek(from_fd,0L,SEEK_END);
fseek(from_fd,0L,SEEK_SET);
printf("from file size is=%d\n",file_len);
/*进行文件拷贝*/
while(ret)
{
ret=read(from_fd,buffer,BUFFER_SIZE);
if(ret == -1)
{
printf("read erro");
exit(1);
}
write(to_fd,buffer,ret);
file_len-=ret;
bzero(buffer,BUFFER_SIZE);
}
fclose(from_fd);
fclose(to_fd);
exit(0);
}