Ошибка записи: неправильный адрес

/* Write and rewrite */ #include #include #include #include #include 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; } 

Я получаю ошибку записи, неудачный сбой адреса при попытке записать 1 Мбайт байтов данных. Почему это так ?

Ваш бафф-байт должен быть как минимум двоичным байтом, чтобы успешный вызов для записи …

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

write() будет считывать nbytes байты из buf и записывать в файл, указанный файловым дескриптором fd .

В вашей программе buf мало по сравнению с nbytes поэтому write() пытается получить доступ к недопустимому адресу, поэтому он дает ошибку Bad Address.

Ваш bufbuff [30] change to buf [1000000], вы можете решить вашу проблему.

Ошибка Bad Address означает, что указанное вами адресное имя недействительно .

Википедия дает хорошее объяснение с примером программы о написании .

По словам человека write write() writes up to count bytes from the buffer pointed buf to the file referred to by the file descriptor fd поэтому вы перекрываете строковый буфер.

Если вы хотите просто заполнить файл этой строкой, попробуйте fwrite , вы можете указать длину строки и общее количество раз для записи буфера (nob / strlen (buff)?).