您的位置:首页 > 运维架构 > Linux

Linux文件I/O学习笔记 1

2016-01-24 22:45 507 查看

1、open函数

建立新文件testopen.txt先

#include<stdio.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>

int main(int argc, char *argv[])
{
int fd;
if(argc!=2)
{
perror("argc!=2");
return -1;
}
fd = open(argv[1], O_RDONLY);
//若文件不存在,创建常用方法
//fd = open(argv[1], O_RDWR|O_CREAT|O_TRUNC,0655)
printf("fd = %d\n", fd);
close(fd);

return 0;
}

执行:
gcc openFunc.c -o open

./open testopen.txt

fd = 3


2、creat函数

创建一个文件

因以只写方式打开创建的文件,故现用方式:

open(path, O_RDWR|O_CREAT|O_TRUNC, mode)


成功返回文件描述符,出错返回-1

3、close函数

close(fd);


成功返回0,失败返回-1。

4、lseek函数

显式地为一个 打开文件 设置偏移量

#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);


成功返回新的文件偏移量,失败返回-1

若lseek成功执行,则返回新的文件偏移量,确定当前偏移量:

off_t currpos;
currpos = lseek(fd, 0 , SEEK_CUR);


注意:

普通文件的当前偏移量必须非负值,部分设备允许负值,比较lseek文件偏移量时不要测试它是否小于0,要测试它是否等于-1.

文件偏移量可以大于文件的当前长度,下次写将加长文件长度,在文件中构成空洞。超出文件尾端后,则不分配磁盘块。

5、read函数

从打开的文件中读数据

#include<unistd.h>

ssize_t read(int fd, void *buf, size_t nbytes);


返回值:读到的字节数,若已到文件尾,返回0;出错,返回-1

6、write函数

向打开文件写数据

#include<unistd.h>
ssize_t write(int fd, const void *buf, size_t nbytes)


返回值:成功,返回已写字节数;出错,返回-1。

常见出错原因:磁盘写满,或者超过一个给定进程的文件长度限制。

对于普通文件,写操作从文件当前偏移量开始。如果在打开文件时,指定了
O_APPEND
选项,则在每次写操作之前,将文件偏移量设置在文件的当前结尾处。

一次成功写之后,文件偏移量增加实际写的字节数。

7、使用write和read复制文件

#include "apue.h"
#define BUFFSIZE 4096
int main(void)
{
int n;
char buf[BUFFERSIZE];

while((n = read (STDIN_FILENO, buf , BUFFERSIZE))>0)
{
if(write(STDOUT_FILENO, buf , n) != n)
{
err_sys("write error!\n");
}
}
if(n<0)
{
err_sys("read error!\n");
}
exit(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: