Linux 标准IO的fopen和fclose

getchar(),putchar() ‐‐‐‐ 一个字符
gets(buf),puts(buf) ‐‐‐‐ 一串字符
scanf(),printf() ‐‐‐‐ 一个字符,一串字符都可以

fopen函数的形式

FILE * fopen(constchar *path , cost char *mode)

/*
* @description : 打开一个文件
* @param ‐ path : 指定文件路径 , 如: "./test.txt"
* @param ‐ mode :指定文件的打开方式,如下图:

* @return :fopen: 成功,返回指向该文件的文件指针; 若失败,返回 NULL

*/
mode有以下值:
r :只读方式打开,文件必须存在
r+ :可读写,文件必须存在
rb+ :打开二进制文件,可以读写
rt+: 打开文本文件,可读写
w: 只写,文件存在则文件长度清 0 ,文件不存在则建立该文件
w+: 可读写,文件存在则文件长度清 0 ,文件不存在则建立该文件
a: 附加方式打开只写,不存在建立该文件,存在写入的数据加到文件尾, EOF 符保留
a+ :附加方式打开可读写,不存在建立该文件,存在写入的数据加到文件尾, EOF 符不保留
wb :打开二进制文件,只写 wb+: 打开或建立二进制文件,可读写
wt+: 打开或建立文本文件,可读写
at+: 打开文本文件,可读写,写的数据加在文本末尾 ab+: 打开二进制文件,可读写,写的数据加在文件末尾

fclose函数的形式

函数原型:int fclose(FILE*stream)

关闭一个文件流,使用 fclose 就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区

/*
* @description : 关闭一个已打开的流
* @param ‐ stream : 文件指针(流)

* @return : fclose:成功,返回0; 若失败,返回EOF

*/
#include<stdio.h>
int main()
{
FILE *fp = NULL;/*create a null file创建一个空的指针文件*/
int nRet = 0 ;
fp =fopen("mm","w");/*fp mode w,create*打开指针文件mm,模式为w 可写,没有文件则创建文件*/
if (fp == NULL)/*NUll open failed!如果创建不成功,则fp=NULL*/
{
printf("open failed!\n");
return -1;

}
printf("open success!\n");/*成功打开则输出打开成功*/
nRet = fclose(fp);
if(nRet)/*close success,others failed!*如果关闭成功则返回0,如果返回其他,则关闭不成功*/
{

printf("close failed!\n");
return -2;

}
printf("close success!\n");/*成功则返回关闭成功*/
return 0;


}
~    

lpych@lpych-virtual-machine:~$ gcc demo2.c -o demo

编译demo2.c 编译完后的文件为demo

lpych@lpych-virtual-machine:~$ ./demo
运行demo

提示:open success!
close success!

说明打开和关闭文件 mm成功!

lpych@lpych-virtual-machine:~$ ls -l
查看文件的权限,mm文件

因为之前mm文件有创建过,模式为0755,可读可写可执行,可读可执行,可读可执行

代码如下

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>

//int open(const char *pathname, int flags);
//int open(const char *pathname, int flags, mode_t mode);
//ssize_t write(int fd, const void *buf, size_t count);
//ssize_t read(int fd, void *buf, size_t count);
#define filename "mm"
#define writeNum 128
#define readNum 12
int main()
{
        int offset;
        int fd;
        char writeBuff[writeNum] = {0};
        char readBuff[readNum] = {0};
        char *test = "hello world";
        if(writeNum<(strlen(test)+1))
        {

                printf("error:writeBuff less than test\n");
                return -1;
        }
        strcpy(writeBuff,test);

        fd = open("mm",O_APPEND|O_RDWR|O_CREAT,0755);
        if(fd == -1)
        {
                printf("open failed!");
                perror("why");
                return -1;
        }
        printf("open successed!");

//      offset = lseek(fd,1,SEEK_CUR);
        printf("offset is %d\n",offset);
        write(fd,&writeBuff[0],11);
//      read(fd,&readBuff,1);
//      printf("%s \n",readBuff);
        close(fd);
        return 0;

因此 lpych用户,可读可写可执行,组用户,可读可执行,其他用户,可读可执行

之前有操作生成过mm,将新文件命名ll

#include<stdio.h>
int main()
{
FILE *fp = NULL;
int nRet = 0 ;
fp =fopen("ll","w");
if (fp == NULL)
{
printf("open failed!\n");
return -1;

}
printf("open success!\n");
nRet = fclose(fp);
if(nRet)
{

printf("close failed!\n");
return -2;

}
printf("close success!\n");
return 0;


}
~  

lpych用户,可读可写,组用户,可读,其他用户,可读 

与w模式相对应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值