cread

时间:2024-04-27 22:27:43编辑:优化君

C语言中read函数的详细解说?

read函数(fread)。 read函数负责从文件句柄中读取指定数量的字节,并将这些字节放在标量型变量中。读者如果熟悉C的标准I/O函数fread的话,就会发现read函数也是以相同方式处理I/O缓冲的。为了提高效率,read函数并不是一次读取一个字节,而是读取一块数据并保存到临时存储区中。然后,C的fread函数与Perl的read函数会从临时缓冲区将数据一次一个字节地传送给程序。(sysread函数可用于模拟C的底层I/O函数read。)该函数会返回读取的字节总数;或者在发生错误时,返回未定义的数字。如果碰到了EOF(文件结束符),则返回0。 print函数(而不是write函数)负责输出read函数返回的实际字节。print函数类似于C中的fwrite函数。


C语言中的read和write怎么用?

1.纠正:read和write是UNIX或者一些类UNIX系统,比如LINUX系统中使用的,称为LINUX系统函数。这种函数只能在特定的操作系统下使用,可移植性差。fread和fwrite是C库函数。这种函数基本在任何操作系统都能使用,可移植性高。2.基础知识介绍只介绍LINUX系统函数,常用的有creat,open,close,read,write,lseek,access,一般用于文件编程3.如何使用谈到如何使用就必须说到另一个知识,文件描述符(file description),是一个非负数。函数原型:int read(int fd, const void *buf, size_t length)功能: 从文件描述符fd所指向的文件中读取length个字节到buf所指向的缓存区中,返回值为实际读取的字节数int write(int fd, const void *buf, size_t length)功能: 把length个字节从buf所指向的缓存区中写到件描述符fd所指向的文件中,返回值为实际写入的字节数 例子:#define LENGTH 1024#define BUFFES_SIZE 1024int n1, n2;int fd1, fd2;int buffer[BUFFES_SIZE];fd1 = open( "HEllo1.txt", O_RDWR | O_CREAT, O_IRUSE | O_IWUSR);fd2 = open( "HEllo2.txt", O_RDWR | O_CREAT, O_IRUSE | O_IWUSR);n1 = read( fd1, buffer, LENGTH);n2 = write( fd2, buffer, n1); 好了累死了,答案完全原创,希望对你有帮助


在C语言中要用到write和read函数要用到什么头文件

1、要用到unistd.h头文件。2、 Write函数  用法:  write函数所在的头文件为   write有两种用法。一种是:  ssize_twrite(int handle, void *buf, int nbyte);  handle 是文件描述符;  buf是指定的缓冲区,即指针,指向一段内存单元;  nbyte是要写入文件指定的字节数;返回值:写入文档的字节数(成功);-1(出错)  write函数把buf中nbyte写入文件描述符handle所指的文档,成功时返回写的字节数,错误时返回-1.  另一种是:write(const char* str,int n)  str是字符指针或字符数组,用来存放一个字符串。n是int型数,它用来表示输出显示字符串中字符的个数。  write("string",strlen("string");表示输出字符串常量3、程序示例:  #include   #include   #include   #include   #include   #include   int main(void)  {  int *handle; char string[40];  int length, res;/* Create a file named "TEST.$$$" in the current directory and write a string to it. If "TEST.$$$" already exists, it will be overwritten. */  if ((handle = open("TEST.$$$", O_WRONLY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE)) == -1)  {  printf("Error opening file.\n");  exit(1);  }  strcpy(string, "Hello, world!\n");  length = strlen(string);  if ((res = write(handle, string, length)) != length)  {  printf("Error writing to the file.\n");  exit(1);  }  printf("Wrote %d bytes to the file.\n", res);  close(handle); return 0; }


linux下c语言编程read()函数的问题

返回-1的时候,要根据错误码来判断原因,请看下面的函数说明:

表头文件 #include
定义函数 ssize_t read(int fd,void * buf ,size_t count);
函数说明 read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数count为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。
附加说明 如果顺利read()会返回实际读到的字节数,最好能将返回值与参数count 作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(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')所返回的. 所以会导致这个情况


当读进程读一空管道时,read函数返回什么值

read
函数从打开的设备或文件中读取数据。
#include
ssize_t read(int fd, void *buf, size_t count);
返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0
参数
count
是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移。注意这个读写位置和使用C标准I/O库时的读写位置有可能不同,这个读写位置是记在内核中的,而使用C标准I/O库时的读写位置是用户空间I/O缓冲区中的位置。比如用fgetc读一个字节,fgetc有可能从内核中预读1024个字节到I/O缓冲区中,再返回第一个字节,这时该文件在内核中记录的读写位置是1024,而在FILE结构体中记录的读写位置是1。注意返回值类型是ssize_t,表示有符号的size_t,这样既可以返回正的字节数、0(表示到达文件末尾)也可以返回负值-1(表示出错)。
read函数返回时,返回值说明了buf中前多少个字节是刚读上来的。有些情况下,实际读到的字节


c语言中read1:是什么意思啊,它怎么用啊

getchar()有一个让人很头疼的特点,这也导致了很多人不喜欢用它……
它会向终端缓存要求一个字符,如果缓存里没有这个字符它就会等待用户输入,于是在用户没有任何多余的输入的情况下,每一次调用它都会等待用户输入一个字符,但是并不是用户输入一个字符它就停止等待了,它的等待是以回车确认作为等待的终止条件的,也就是说,用户可以在回车之前输入n个字符,但是它只会返回第一个字符,其它的所有字符都会保留在终端缓存中,当下一次再执行getchar()的时候,才会从终端缓存中取出并返回这个字符……
由于每一次输入一个字符的时候都要按回车确认以终止等待,所以在缓存中将会存留一个回车,如果不再执行一次取出这个回车,它可能会影响到下一次的输入……
但是往往这不是处理事情的最好方式,因为,用户可能并不是输入一个字符加一个回车,用户可能会输入更多字符和一个回车,这时,这种处理方式反而会得到一种反效果,因为用户可能希望将所有的字符放在一起输入,这时,下一次getchar将是第一次输入中的下一个字符而不再产生等待,而这种处理方式不仅不会去除掉最后的回车(因为此时的回车不再是下一个字符了,而是在整个字符串的最后),反而会使得字符串中下一个字符的输入丢失……
所以getchar的这个特点使得它在实际应用中大受限制,仅仅会在编程学习中发挥一定的作用……同时scanf也有类似的弊病,比如说在请求数字的时候输入字符串之后程序所有的请求数字的scanf将会得到一连串奇怪的返回值……
等等这些在处理复杂的输入时将会使人很头疼……
常用的办法是使用conio.h中的getch()编写自己想要的输入,这个函数只会等待一个字符,而不会等待回车……

为什么C语言中read函数和write函数间要用lseek来调整读取顺序

-由于程序在打开文件时文件操作指针位于文件起始位置,即偏移量0
-读取了1个字符的内容给变量c,文件指针偏移量为1
-这时如果想将c值写到文件开始位置,则需要移动文件指针到文件开始
-于是lseek就是移动文件当前指针的语句,它通知系统将文件指针移动到从文件开始位置(SEEK_SER)起的第0字节
-这个程序比较奇怪,明明打开文件时选用了0_WRONLY参数,表明这个打开是只写的,但上来就读


上一篇:whenever是什么意思

下一篇:受宠若惊造句