linuxC函数write()写入的数据是如何存储的?read()又是如何读取的
使用二进制存储
write(fd, &student, sizeof(student));
read(fd, &student, sizeof(student));
如果要读取里面第3个student的内容:
lseek(fd, 2 * sizeof(student), SEEK_SET); //即从开始搜索2个student那么长。
这样的前提是student中没有指针,因为每次运行指针的内容是不确定的。
c语言的保存函数怎么写
在dos模式下,可以使用“应用程序名 => 文本文件”回车。
例如要把一个名为test.exe的c语言可执行程序的运行结果保存下来,则可以在dos的命令提示符下:test => c:\result.txt 回车,这样运行结果就保存在文本文件中了。
void save()
{
char name[10];
FILE *fp;
int i;
scanf("%s",name)
if((fp=fopen(name,"wb"))==NULL)
{printf("cannot open file\n");
return;}
for(i=0;i<MAX;i++)
if(fwrite(&user[i],sizeof(struct diary_type),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
c语言中read函数的用法
在C语言中,read函数用于从文件描述符中读取指定数量的字节并存储到缓冲区中。它的原型为ssize_t read(int fd, void *buf, size_t count),其中fd是要读取的文件描述符,buf是用于存储读取数据的缓冲区指针,count表示要读取的字节数。
read函数会返回实际读取的字节数,如果返回值为-1,则表示读取出错。
该函数主要用于读取二进制文件或网络数据等,可以使用循环读取的方式读取大文件或者较大数据,确保读取完所有字节。同时,需要注意的是,read函数是一个阻塞函数,即在文件中没有足够的数据可读时,会一直等待直到有足够的数据可供读取。
函数原型定义:
ssize_t read[1] (int fd, void *buf, size_t count);
2/8
使用的头文件:
#include <unistd.h>
3/8
函数的返回值说明:
(1)如果成功,返回读取的字节数;
(2)如果出错,返回-1并设置errno;
(3)如果在调read函数之前已是文件末尾,则返回0
4/8
函数的参数【int fd】:
这个是文件指针
5/8
函数的参数【void *buf】:
读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移
6/8
函数的参数【size_t count】:
是请求读取的字节数。若参数count 为0, 则read()不会有作用并返回0. 返回值为实际读取到的字节数, 如果返回0
7/8
函数的使用注意事项:
如果顺利 read()会返回实际读到的字节数, 最好能将返回值与参数count 作比较, 若返回的字节数比要求读取的字节数少, 则有可能读到了文件尾
8/8
read()函数使用的简单例子:#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>main(){ int fd, size; char s[] = "Linux Programmer!\n", buffer[80]; fd = open("/tmp/temp", O_WRONLY|O_CREAT); write(fd, s, sizeof(s)); close(fd); fd = open("/tmp/temp", O_RDONLY); size = read(fd, buffer, sizeof(buffer)); close(fd); printf("%s", buffer);}