/* Write and rewrite */
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main(int argc,char* argv[]){
int i = 0;
int w_rw = 0;
int fd = -1;
int bw = -1;
int nob = 0;
char* file_name = "myfile";
char buff[30] = "Dummy File Testing";
w_rw = 1; // 1 - write , 2 - rewrite
nob = 1000000; // No of bytes to write
printf("\n File - Create,Open,Write \n");
for(i = 0; i < w_rw; i++){
printf("fd:%d line : %d\n",fd,__LINE__);
if((fd = open(file_name,O_CREAT | O_RDWR))< 0){
perror("Open failed!");
return -1;
}
printf("fd:%d",fd);
if((bw = write(fd,buff,nob)) < 0){
perror("Write failed!");
return -1;
}
printf("\n Bytes written : %d \n",bw);
}
return 0;
}
我遇到写入错误,尝试写入1MB字节的数据时出现错误的地址失败。为什么会这样?
答案 0 :(得分:2)
ssize_t write(int fd, const void *buf, size_t nbytes);
write()
系统调用将从nbytes
读取buf
个字节,并写入文件描述符fd
引用的文件。
在您的计划中,buf
与nbytes
相比很小,因此write()
尝试访问无效的地址位置,因此会给出错误地址错误。
您的buf
buff [30] 更改为 buf [1000000] ,您可以解决问题。
错误地址错误表示您提供的地址位置无效。
Wikipedia giving good explanation with example program about write
答案 1 :(得分:1)
你的buff数组应至少为nob字节长,以便写入调用成功...
答案 2 :(得分:1)