📄 write.c
字号:
#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <unistd.h>#include <string.h>#include <errno.h>#include <sys/mman.h>#include <fcntl.h>#define BUFFER_SIZE 32typedef struct _human{ unsigned long id; unsigned long weight; unsigned long length; unsigned long married; char name[BUFFER_SIZE];} human_t;int main(int argc, char **argv){ int fd; if (argc < 2) { fprintf(stdout, "Usage: %s <filename>\n", argv[0]); exit(1); } if ((fd = open(argv[1], O_RDWR | O_CREAT | O_EXCL, 0644)) < 0) { if (errno != EEXIST) { fprintf(stderr, "open() failed: %s", strerror(errno)); exit(1); } else { if ((fd = open(argv[1], O_RDWR)) < 0) { fprintf(stderr, "open() failed: %s", strerror(errno)); exit(1); } } } lseek(fd, 30 * sizeof(human_t), SEEK_SET); write(fd, "", 1); human_t *h; if ((h = mmap(NULL, 30 * sizeof(human_t), PROT_WRITE, MAP_SHARED, fd, 0)) == MAP_FAILED) { fprintf(stderr, "mmap() failed: %s\n", strerror(errno)); exit(1); } fprintf(stdout, "mmap() successed.\n"); close(fd); fprintf(stdout, "closed file.\n"); int i; for (i = 0; i < 30; i++) { (h + i)->id = i; (h + i)->weight = 80 + i; (h + i)->length = 180 + i; //memcpy((h + i)->name, "Ligen", strlen("Ligen")); snprintf((h + i)->name, BUFFER_SIZE, "Ligen %d", i); (h + i)->married = 0; } fprintf(stdout, "write infomation to mapped area.\n"); for (;;) { } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -