C语言read函数漏洞 c语言readdir函数( 二 )


linux下c语言编程read()函数的问题返回-1的时候C语言read函数漏洞,要根据错误码来判断原因C语言read函数漏洞,请看下面的函数说明:
表头文件 #includeunistd.h
定义函数 ssize_t read(int fd,void * buf ,size_t count);
函数说明 read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中 。若参数count为0C语言read函数漏洞,则read()不会有作用并返回0 。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动 。
附加说明 如果顺利read()会返回实际读到的字节数 , 最好能将返回值与参数count 作比较,若返回的字节数比要求读取的字节数少,则有可能读到C语言read函数漏洞了文件尾、从管道(pipe)或终端机读取,或者是read()被信号中断了读取动作 。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期 。
错误代码 EINTR 此调用被信号所中断 。EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则返回此值 。EBADF 参数fd 非有效的文件描述词 , 或该文件已关闭 。
C语言read函数read内部是调_read, _read的返回值在msdn中有这样的描述
_read returns the number of bytes read, which might be less than count if there are fewer than count bytes left in the file or if the file was opened in text mode, in which case each carriage return–line feed (CR-LF) pair is replaced with a single linefeed character. Only the single linefeed character is counted in the return value. The replacement does not affect the file pointer.
注意这一段: in which case each carriage return–line feed (CR-LF) pair is replaced with a single linefeed character
就是说如果用text模式打开的话, 文件换行时可能在文本中有2个字符----换行和缩进(CR-LF), 而在return的时候系统是把它作为1个回车符号('\n')所返回的. 所以会导致这个情况
c语言求助!readfile()那个函数有问题,请您帮助写一个可以没有问题的代码 。真心感谢您!#includestdio.h
#includemath.h
#includemalloc.h
#includestdlib.h
#includestring.h
enum sex{
female,male
};
struct student
{
char name[20];
enum sex sex;
int score[3];
【C语言read函数漏洞 c语言readdir函数】 char number[9];
struct student *next;
};
//学生结构体
struct student* inputcard()
//录入学生信息系统(所有学生信息)
{
int i=1;
int n,k;
printf("输入学生个数:");
//检错 。学生个数正确
scanf("%d",n);
struct student*p;
struct student*p0;
struct student*head;
p=(struct student*)malloc(sizeof(struct student));
printf("输入学号8位:");
//检错 。学号数目正确
scanf("%s",p-number);
printf("输入姓名:");
scanf("%s",p-name);
printf("选择性别:0男,1女");
//检错 。性别输入正确
scanf("%d",k);
switch(k)
{
case 1:
p-sex=female;
break;
case 0:
p-sex=male;
}
printf("输入成绩,语数外的顺序");
//成绩输入在0~100
scanf("%d%d%d",(p-score[0]),(p-score[1]),(p-score[2]));
head=p;
//先输入一个 , 记录链头
p0=p;
while(i=n-1)
{
int k;
p=(struct student*)malloc(sizeof(struct student));
printf("输入学号:");
scanf("%s",p-number);
printf("输入姓名:");
scanf("%s",p-name);
printf("选择性别:0男,1女");
scanf("%d",k);
switch(k)
{
case 1:
p-sex=female;
break;
case 0:

推荐阅读