1. OPEN
umask=2, 666&(~2)=664
2. CLOSE
3. Read
4. write
模拟 cat:
需求:
写hello到一个文件,然后读取,输出到终端。
若这样写,read不到,因为写hello后将到文件末尾。
需要lseek
lseek 计算文件大小
少了一句: close(fd)!!!!
lseek 拓展文件
阻塞与非阻塞
通过 O_NONBLOCK实现非阻塞
非阻塞的情况下read返回-1,但是需要判断errno的值来确定是否是非阻塞。
另一种方法设置非阻塞, 通过fcntl()函数
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main() { int fd=open("/dev/tty",O_RDWR); //fcntl() function, set unblock int flags=fcntl(fd,F_GETFL);//get flags flags|=O_NONBLOCK;// change flags fcntl(fd,F_SETFL,flags);//set flags char buf[256]; int ret=0; while(1){ //not blocked ret=read(fd,buf,sizeof(buf)); if(ret<0){ perror("read err:"); printf("ret is %d ", ret); } if(ret){ printf("buf is %s ", buf); } printf("haha "); sleep(2); } close(fd); return 0; }