头文件
#include<unistd.h>
功能
向文件中写入数据,写入文件时是从当前偏移量处开始,我们可以在open时通过O_APPEND将偏移量偏移到文件尾,或者是可以使用lseek随意设置偏移量。
成功写入之后,当前偏移量会跟着变化的。
函数原型
ssize_t write(int filedes, void *buff, size_t nbytes);
参数说明
1、filedes:文件描述符
2、buff:要写入的数据的缓冲区buf
3、nbytes:要写入的字节数
返回值
失败:-1
成功:成功写入的字节数,可以小于nbytes
示例
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
void usage(void)
{
printf("./read cmd\n"
"cmd:0 read 16 bytes\n"
"cmd:0 read 256 bytes\n");
}
int read_file(int fd)
{
int ret = -1, len = -1;
unsigned char buff[256];
memset(buff, 0, 256);
len = lseek(fd, 0, SEEK_END);
lseek(fd, 0, SEEK_SET);
ret = read(fd, buff, len);
if(ret!=len){
printf("read file err %d \n", ret);
return -1;
}
printf("read len %s\n", buff);
return 0;
}
int main(int argc,char **argv)
{
int ret = -1, cmd = -1, len = -1, fd = -1, i = 0;
unsigned char data[6] = {'h','e','l','l','0','!'};
cmd = atoi(argv[1]);
switch(cmd){
case 0:
fd = open("test",O_RDWR);
ret = read_file(fd);
if(ret){
printf("read file err\n");
goto out;
}
lseek(fd, 0, SEEK_END);
ret = write(fd, data, 6);
if(ret!=6){
printf("write file err\n");
goto out;
}
ret = read_file(fd);
if(ret){
printf("read file err\n");
goto out;
}
break;
case 1:
fd = open("test",O_RDWR);
ret = read_file(fd);
if(ret){
printf("read file err\n");
goto out;
}
lseek(fd, 0, SEEK_SET);
ret = write(fd, data, 6);
if(ret!=6){
printf("write file err\n");
goto out;
}
ret = read_file(fd);
if(ret){
printf("read file err\n");
goto out;
}
break;
default:
usage();
break;
}
out:
close(fd);
return 0;
}
测试结果: