1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <string.h> #include <stdio.h> #include <errno.h> #include <fcntl.h> #include <stdlib.h>
#define BUFSIZE 1024 #define SUCCESS 0 #define FAILURE -1
int write_to_file(int fd, const char* buf, const size_t nbytes){ size_t left = nbytes; size_t written_len = 0; const char* p_tmp = buf;
while(left > 0){ written_len = write(fd, p_tmp, left);
if(written_len < 0){ written_len = -errno;
if(written_len == EINTR || written_len == EAGAIN){ continue; }
if(written_len == EBADF){ break; }
fprintf(stderr, "write failed, reason:%s\n", strerror(errno)); return FAILURE; } else if(0 == written_len){ break; }
left -= written_len; p_tmp += written_len; }
if(0 != left){ return FAILURE; }
return SUCCESS; }
int main(int argc, char** argv){ int fd = 0; fd = open("./test.txt", O_RDWR | O_CREAT, S_IRWXU | S_IRGRP | S_IROTH);
if(-1 == fd){ fprintf(stderr, "open failed, reason:%s\n", strerror(errno)); exit(-1); }
off_t size = lseek(fd, 0, SEEK_END); char buf[BUFSIZE]; int ret = 0; int i = 0;
memset(buf, '8', BUFSIZE);
for(i = 0; i < 10; ++i){ ret = write_to_file(fd, buf, BUFSIZE); if(FAILURE == ret){ break; } }
close(fd); return 0; }
|