赞
踩
man 2 read
man 2 write
注意:
头文件#include<unistd.h>
ssize_t read(int fd,void *buf,size_t count)
fd
:文件描述符buf
:存数据的缓冲区count
:缓冲区大小返回值
ssize_t write(int fd,const void *buf,size_t count)
fd
:文件描述符buf
:待写出数据的缓冲区count
:实际要写入的数据的大小返回值
shell 中使用strace命令跟踪程序执行,查看调用的系统函数。
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<pthread.h> #include<fcntl.h> int main(int argc,char *argv[]) { char buf[1024]; int n = 0; int fd1 = open(argv[1],O_RDONLY); int fd2 = open(argv[2],O_RDWR | O_CREAT | O_TRUNC,0664); if( fd1 == -1){ perror("open argv1 error"); exit(1); } if(fd2 == -1){ perror("open argv2 error"); exit(1); } while( (n = read(fd1,buf,1024)) != 0){ if( n < 0){ perror("read error"); break; } write(fd2,buf,n); } close(fd1); close(fd2); }
read、write函数常常被称为Unbuffered I/O .指的是无用户及缓冲区。但不保证不使用内核缓冲区。
printf("xxx error: %d\n",errno);
char *strerror(int errnum);
printf("xx error : %s\n",strerror(errno));
void perror(const char *s);
perror("open error");
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。