1.Linux文件分为哪些?
(1)普通文件(regular)
(2)目录文件(directory)
(3)管道文件(pipe)
(4)套接字文件(socket)
(5)链接文件(link)
(6)字符设备文件(character)
(7)块设备文件(block)
2.fopen()和fclose()
ANSI C规定了标准输入输出函数库,用fopen()函数来实现打开文件,用fclose()函数来实现关闭打开的文件。
fopen()函数的一般的形式是:
FILE *fp;
fopen(文件名,使用文件方式);
fclose()函数的一般形式是:
fclose(文件指针);
参数介绍:
文件名:顾名思义,就是要打开的文件的名称。
说明:
1) 用“r“方式打开的文件只能用于湘计算机输入而不能用作向该文件输出数据, 而且该文件必须是存在的文件,不能用“r”方式打开一个不存在的文件。
2) 用“w”方式打开的文件只能用于向该文件写数据,而不能用于向计算机输入, 如果该文件不存在,则在打开时新建一个以指定的文件名命名的文件。
3) 如果希望向文件末尾追加新的数据而又不希望删除原来的数据,则应该用“a” 方式打开,但是此文件必须是存在的。
4) 用“r+”、“w+”、“a+”方式打开的文件既可以用来输入数据,也可以用来输出 数据。
5) 在程序运行的时候,系统自动打开三个标准文件:标准输入、标准输出、标准 出错输出。
文件指针:文件打开时所带回的指着赋给了fp,通过fp把改文件关闭。
3.如何来访问一个文件?
通过系统调用来访问文件是最直接的方式。系统调用函数直接作用于操作系统内核的设备驱动程序从而实现文件访问。
4.系统调用时应注意什么
1.系统调用函数通常在成功是返回0,不成功时返回非零值,如果要检查失败原因,则要判断全局变量errno的值,errno中包含错误代码。
2.许多系统调用的返回数据通常通过引用参数传递,这时需要函数参数中传递缓冲区地址,而返回的数据就保存在缓冲区中。
3.不能认为系统调用函数比其他函数的执行效率高,要注意系统调用是一个非常耗时的过程
5.fread()和fwrite()区别?
fread()函数和fwrite()函数用来读写一个数据块。它们的一般调用形式为:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
其中:
buffer:是一个指针。对fread()来说,它是读入数据的存放地址;对于fwrite() 来说,是要输出数据的地址。
size:要读写的字节数。
count:要进行读写多少个size字节的数据项。
fp:文件指针。
6.printf、fprintf与sprintf的区别
都是把格式好的字符串输出,只是输出的目标不一样:
1 printf,是把格式字符串输出到标准输出(一般是屏幕,可以重定向)。
2 sprintf,是把格式字符串输出到指定字符串中,所以参数比printf多一个char*。那就是目标字符串地址。
3 fprintf, 是把格式字符串输出到指定文件设备中,所以参数笔printf多一个文件指针FILE*
7.fgets()和fputs()不同点?
fgets函数的作用是从指定文件读入一个字符串到指定缓冲中。如:fgets(str,n,fp),从fp所指向的文件读取n-1个字符,在末尾加上一个’\0’,所以保存到字符数组str中的字符数位n个。
fputs函数的作用是指向指定的文件输出一个字符串。如:fputs(“china”,fp),把字符串“china”输出到fp指向为文件。
8.带缓冲与不带缓冲的I/O操作区别?
不带缓冲的文件I/O操作主要用到6个函数,creat, open, read, write, lseek和close。不带缓冲是指每一个函数都只调用系统中的一个函数,这些函数不是ANSI C的组成部分,却是POSIX的组成部分。