unxi环境高级编程第五章课后习题


       unxi环境高级编程第五章课后习题
5.1 
void setbuf(FILE* restrict_fp, char* restrict_buf)
{	
	if(NULL == buf){
		setvbuf(restrict_fp,NULL,_IONBF, 0);
	}
	else {
		struct stat temp_stat;
                int fd;
                fd = fileno(restrict_fp);
                fstat(fd,&temp_stat);
		if(IS_ISCHR(temp_stat.st_mode))
			setvbuf(resrict_fp,buf,_IOLBF,sizeof(buf));
		else
			setvbuf(resrict_fp,buf,_IOFBF,sizeof(buf));
	}
}

第五章讲解的文件流,但是S_ISCHR函数的st_mode是关于文件描述符的,所以用fileno变为文件描述符;
#include<sys/stat.h>
#include<stdio.h>
#include<unistd.h>

int main()
{	
	struct stat stat1;
	fstat(STDIN_FILENO,&stat1 );
	if(S_ISCHR(stat1.st_mode))
		printf("true");
	else
		printf("false");
}
在第四章中,S_ISCHR描述的是字符特殊文件,以上代码是验证标准输出是不是文件特殊字符;
5.2
每次只会读取三个,输出三个,如若改换中包括最后一个换行符的字符数超过n-1,则fget只会返回一个不完整的行,单数缓冲区总是一NULl字符结尾,下一次继续调用该行;
5.3
printf返回值为0,表示没有写出任何字符;
5.4
getchar 和putchar的返回值是int类型,而不是char类型。由于EOF经常定义为-1,哪买如果系统使用的是有符号的字符类型,程序可以正常工作。如何使用的是无符号字符类型,返回的EOF被保存到c后将不再是-1,所有程序进入死循环。
5.5节,标准I/o流如何使用fsync函数?
先调用fflush,再调用fsync函数;
5.6当程序交互运行时,标准输出和标准输入位行缓冲,每次调用fgets时,标准输出将自动冲洗;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值