pread介绍
1.先來介紹pread函數
[root@bogon mycode]# cat test.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> char buf[20]; void testpread(int fd1) {int i;printf("use pread\n");pread(fd1, buf, 3, 2);//起始位置為2,偏移量為3,總的意思就是從fd1文件描述符中的起始位置//為2到偏移量為3的內容讀取到buf中,注意執行后文件偏移量沒有變動,//所以下面的第一條read語句,起始位置還是開頭那里for (i=0; i<3; i++) printf("%c", buf[i]);read(fd1, buf, 3);for (i=0; i<3; i++)printf("%c", buf[i]);printf("\nuse read\n");read(fd1, buf, 3); //上一次read使得文件偏移量移動了3個位置,所以打印的是456for (i=0; i<3; i++) printf("%c", buf[i]); }int main() {int fd, fd1, i;fd1 = open("linux.txt", O_RDWR);testpread(fd1);close(fd1);return 0; } [root@bogon mycode]# cat linux.txt 123456 [root@bogon mycode]# gcc test.c [root@bogon mycode]# ./a.out use pread 345123 use read 456 [root@bogon mycode]#2.再介紹pwrite
[root@bogon mycode]# cat linux.txt 123456 [root@bogon mycode]# cat test.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> char buf[20]; char name[] = "linuxfiletest"; void testpwrite(int fd1) {int i;pwrite(fd1, name, 5, 0);//從name中取5個字節從fd1的起始0位置開始寫入read(fd1, buf, 5);//pwrite不會改變文件偏移量,所以這里還是從頭開始打印的for (i=0; i<5; i++) printf("%c", buf[i]);printf("\n"); } int main() {int fd, fd1, i;fd1 = open("linux.txt", O_RDWR);testpwrite(fd1);close(fd1);return 0; } [root@bogon mycode]# gcc test.c [root@bogon mycode]# ./a.out linux [root@bogon mycode]# cat linux.txt linux6//文件內容被修改了 [root@bogon mycode]#參考鏈接:https://blog.csdn.net/qq_34829953/article/details/72725406
總結
- 上一篇: Linux Sendfile的优势
- 下一篇: getsockopt和setsockop