Linux文件编程,时间编程——库函数-文件访问

1、库函数——创建和打开

FILE *fopen(const char* filename, const char* mode)

filename:创建或者打开的文件名(包括路径)

mode:打开模式

所需库:<stdio.h>

 返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。

mode有下列几种形态字符串:
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
at+ 打开一个叫string的文件,a表示append,就是说写入处理的时候是接着原来文件已有内容写入,不是从头写入覆盖掉,t表示打开文件的类型是文本文件,+号表示对文件既可以读也可以写。
b用于区分二进制文件。但是linux系统中没有二进制文件和普通文件之分,所以r=rb,r+=rb+

2、库函数——读

    函数原型
       size_t fread ( void * buffer , size_t  size , size_t  count , FILE * stream ) ;
功能:
         从stream指向的文件中读取count个字段,每个字段为size个字节,并将读取的数据放入buffer指向的字符数组中,返回实际已经读取的字节数。
参 数
     buffer      用于接收数据 的内存地址 ,大小至少是 size * count 字节.
     size        单个元素的大小,单位是字节
     count     元素 的个数,每个元素是size字节.
     stream     输入流
返回值 
     实际读取的元素个数.如果返回值与 count不相同,则可能文件结尾或发生错误.
     从ferror和feof获取错误信息或检测是否到达文件结尾.
3、库函数——写

原型:

         size_t  fwrite(const void *ptr, size_t size, size_t n, FILE *stream);

功能:

         从缓冲区ptr所指的数组中把n个字段写到stream指向的文件中,每个字段长为size个字节,返回实际写入的字段数。

注意:这个函数以二进制形式对文件进行操作,不局限于文本文件

4、库函数——读字符

int fgetc(FILE *stream)

原型:

        从stream指定的文件中读取一个字符。读取一个字节后,光标位置后移一个字节。

这个函数的返回值,是返回所读取的一个字节。如果读到文件末尾或者读取出错时返回EOF。

5、库函数——写字符

int fputc(int c, FILE *stream)

 向stream指定的文件中写入一个字符c。在正常调用情况下,函数返回读取字符的ASCII码值,出错时,返回EOF(-1)。当正确写入一个字符或一个字节的数据后,文件内部写指针会自动后移一个字节的位置。EOF是在头文件 stdio.h中定义的宏。


6、库函数——格式化读

fscanf(FILE *stream, char *format[, argument……])

        从一个流中进行格式化输入。fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束

#include    <stdlib.h>
#include    <stdio.h>

int main(void)
{
    int i;
    printf("Input an integer:");
    if( fscanf(stdin, "%d" , &i) )
    {
	printf("The integer read was:%i\n", i);
    }
    return 0;
}

补充:

FILE *stdin; //标准输入设备文件(键盘)

FILE *stdout; //标准输出设备文件(显示器)

FILE *stderr; //标准错误输出设备文件(显示器)

#include <stdio.h>

//每一个进程都默认的打开这三个文件:

int main()

{

       fprintf(stdout,"%s","hello world!\n");//此句同2句是一样的。

       //printf("%s","hello world!\n");

       fprintf(stderr,"%s","hello world!\n");

       int x;

       fscanf(stdin,"%d",&x);//此句同下句是一样的。

       scanf("%d",&x);

       /* stdout和stderr的区别:

       1.stdout有输出缓冲区,stderr没有输出缓冲区。

       2.stdout可以重定向,stderr没有重定向(也就是stdout可以把输出结果送到其它地方,stderr不可以);

       3.什么时候stdout会清空缓冲区:

       当输出换行时、缓冲区满时、用fflush刷新时、等待用户输入时、程序运行结束时,当缓冲区清空时,缓冲区的内容会送到显示器*/

       return 0;

}

7、库函数——格式化写

int fprintf(FILE *stream, char format[,argument,……])

     fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件。 fprintf()只能和printf()一样工作。 fprintf()的返回值是输出的字符数,发生错误时返回一个负值。

#include <stdio.h>
#include <process.h>
FILE *stream;
int main( void )
{
    int i = 10;
    double fp = 1.5;
    char s[] = "this is a string";
    char c = '\n';
    stream = fopen( "fprintf.out", "w" );
    fprintf( stream, "%s%c", s, c );
    fprintf( stream, "%d\n", i );
    fprintf( stream, "%f\n", fp );
    fclose( stream );
    system( "type fprintf.out" );
    return 0;
}
屏幕输出:


this is a string
10
1.500000

8、库函数——定位

int fseek(FILE *stream,long offset ,int whence)

函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。
成功,返回0,失败返回-1,并设置errno的值,可以用perror()函数输出错误。
9、路径获取

char* getcwd(char* buf, size_t size)

功 能:获取当前工作目录

作用:把当前目录的绝对路径保存到 buf 中,buf 的大小为 size。如果 size太小无法保存该地址,返回 -1 并设置 errno 为 ERANGE。可以采取令 buf 为 NULL并使 size 为负值来使 getcwd 调用 malloc 动态给 buf 分配,但是这种情况要特别注意使用后释放缓冲以防止内存泄漏。

#include <unistd.h>

int main( void )
{
    char buf[80];
    getcwd(buf, sizeof(buf));
    printf("current working directory:%s\n",buf);
    return 0;
}

10、创建目录

#include    <sys/stat.h>

       int mkdir(char* dir,int mode)

功能:创建一个新目录。

返回值:0表示成功,-1表示出错。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值