补充文件操作:
1 fcntl函数──对已打开文件描述符进行各种控制操作
int fcntl(int fd,int cmd) 头文件<fcntl.h>
cmd=
F_DUPFD 复制fd
F_GETFD F_SETFD 获取/设置fd
F_GETLK F_SETLK F_SETLKW 获取/设置记录锁
F_GETOWN F_SETOWN 获取/设置异步 I/O
F_GETFL F_SETFL获取/设置文件标志,只能修改O_APPEND O_NONBLOCK O_ASYNC
2 但对终端发出read调用时,如果一行数据没准备好,则read函数调用不返回,继续等待,这时,进程处于睡眠状态,直到数据准备好才被唤醒,称为阻塞方式
代码:──阻塞方式,如果把屏蔽的两句话打开,就处于非阻塞状态了
#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
int main()
{
char buf[255];
int num,oldstatus;
//oldstatus=fcntl(0,F_GETFL);
//fcntl(0,F_SETFL,oldstatus|O_NDELAY);
num=read(0,buf,sizeof(buf));
if(num==-1) perror("wrong");
buf[num]=0;
char ptr1[]="size";
printf("read %d cha %d %d/n",num, sizeof("size"), sizeof(ptr1));
printf("read string is %s/n", buf);
1 fcntl函数──对已打开文件描述符进行各种控制操作
int fcntl(int fd,int cmd) 头文件<fcntl.h>
cmd=
F_DUPFD 复制fd
F_GETFD F_SETFD 获取/设置fd
F_GETLK F_SETLK F_SETLKW 获取/设置记录锁
F_GETOWN F_SETOWN 获取/设置异步 I/O
F_GETFL F_SETFL获取/设置文件标志,只能修改O_APPEND O_NONBLOCK O_ASYNC
2 但对终端发出read调用时,如果一行数据没准备好,则read函数调用不返回,继续等待,这时,进程处于睡眠状态,直到数据准备好才被唤醒,称为阻塞方式
代码:──阻塞方式,如果把屏蔽的两句话打开,就处于非阻塞状态了
#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
int main()
{
char buf[255];
int num,oldstatus;
//oldstatus=fcntl(0,F_GETFL);
//fcntl(0,F_SETFL,oldstatus|O_NDELAY);
num=read(0,buf,sizeof(buf));
if(num==-1) perror("wrong");
buf[num]=0;
char ptr1[]="size";
printf("read %d cha %d %d/n",num, sizeof("size"), sizeof(ptr1));
printf("read string is %s/n", buf);