库函数
一、概念:C库函数的文件操作是独立于具体的操作系统平台的,不管是再DOS、Windows、lInux还是在VxWorks中都是使用这些函数。
二、常见函数
1、打开操作
函数:FILE *fopen(const char *filename,const char *mode)
参数:mode模式:
r,rb 只读方式打开
w,wb 只写方式打开,如果文件不存在,则创建该文件
a,ab 追加方式打开,如果文件不存在,则创建该文件
r+,r+b,rb+ 读写方式打开
w+,w+b,wb+ 读写方式打开,如果……
a+,a+b,ab+ 读和追加方式打开。如果……
b用于区分二进制文件和文本文件,这一点只在DOS、Windows系统中有区分。
2、文件的读操作
函数:size_t fread(void *ptr,size_t size,size_t n,FILE *stream)
功能:从stream指向的文件中读取n个字段,每个字段为size字节,并将读取的的数据放入
ptr所指向的字符数组中,返回实际已读取的字节数。读取的数据量为size*n。
3、文件的写操作
函数:size_t fwrite(const void *ptr,size_t size,size_t n,FILE *stream)
功能:从缓冲区ptr所指向的数组中把n个字段写到stream指向的文件中,每个字段长为size个
字节,返回世界写入的字段数。
4、int fgetc(FILE *stream)
功能:从指定的文件中读一个字符
实例:
#include
main()
{
FILE *fp;
char ch;
if((fp=fopen("c1.txt","rt")) == NULL)
{
printf("\nCannt open file strike any key exit!");
getch();
exit(1);
}
ch = fgetc(fp);
while(ch != EOF)
{
putchar(ch);
ch = fgetc(fp);
}
fclose(fp);
}
5、int fputc(FILE *stream)
功能:从指定的文件中写一个字符
实例:
#include
main()
{
FILE *fp;
char ch;
if((fp=fopen("string","wt+")) == NULL)
{
printf("\nCannt open file strike any key exit!");
getch();
exit(1);
}
printf("input a string:\n");
ch = getchar;
while(ch != '\n')
{
fputc(ch,fp);
ch = getchar();
}
printf("\n");
fclose(fp);
}
6、文件定位
函数:int fseek(FILE *stream,long offset,int whence)
用法与linux中的lseek一致。
7、路径获取
函数:char *getcwd(char *buffer,size_t size)
功能:getcwd会把当前的路径名copy到大小为size的buffer中去。如果buffer太小,函数返回-1
#include
main()
{
char buf[80];
getcwd(buf,sizeof(buf));
printf("current workong directory is %s",buf);
}
8、 创建目录
#include
int mkdir(char *dir,int mode)
返回0表示成功,-1表示出错。
实例:
#include
#include
typedef struct student
{
char name[10];
int num;
int age;
char addr[15];
}TypeStu,*TypePtr;
void main()
{
FILE *fp;
int ret;
TypePtr pa=NULL;
TypeStu stu[2];
int i;
if((fp=fopen("stu_lis.txt","w+"))==NULL)
{
printf("open file failed!\n");
exit(1);
}
pa = (TypeStu *)malloc(sizeof(TypeStu));
if(pa == NULL)
{
printf("malloc failed\n");
exit(1);
}
printf("input data:\n");
for(i = 0; i < 2; i++)
{
scanf("%s %d %d %s",pa->name,
&pa->num,&pa->age,pa->addr);
ret = fwrite(pa,sizeof(TypeStu),1,fp);
if(ret != 1)
{
printf("write data failed\n");
}
}
rewind(fp);
ret=fread(stu,sizeof(TypeStu),2,fp);
if(ret != 2)
{
printf("read data failed\n");
exit(1);
}
for(i = 0; i < 2; i++)
printf("stu[%d]------------->name:%s num:%d age:%d addr:%s\n",
i,stu[i].name,stu[i].num,stu[i].age,stu[i].addr);
fclose(fp);
}
阅读(2429) | 评论(0) | 转发(0) |