Linux文件编程

文件操作

(一)、文件类型:d:目录,l:链接,c:字符设备、d:块设备、p:管道文件、s:共享文件
(二)、文件描述符:
特点:1、文件描述符是一个非负整数    2、文件描述符是动态分配的    3、获得文件描述符之后,对文件描述符操作就相当于对文件操作    4、文件描述符从3开始
(三)、API接口:
1、create:
函数原型:create(const *pathname,mode_t mode);
头文件:#include <sys/types.h>    #include <sys/stat.h>    #include <sys/fcntl.h>
范例:create ("a.txt",S_IRUSR);(第二个参数可加ctrl +n补齐)
可读可写:S_IRUSR | S_IWUSR    可同时具备两个属性
特点:create会覆盖,但不会修改权限


设定创建文件夹名称:
char file_name[10];
scanf("%s\nb",file_name);
create(file_name,0655);
也可以由终端命令行输入:
int main(int argc,char *argv[])
{
    if(argc != 2)
    {
        printf("error!\n);
        exit(1);
    }


    create(argv[1],0655);
    
    return 0;
}


createAPI成功返回一个文件描述符,错误返回-1并且置入errno
例子:
int fd = create(argv[1],0655);


if(fd == -1)
{
    perror("create error!\n");
    exit(1);
}


使用perror要加头文件#include <error.h>
如果有下面这种方式发出警告,是不可行的:
if(fd == -1 && errno == ENOTDIR)
{
    printf("create error!\n");
    exit(1);
}
因为errno是全局变量,它的值可能被修改


可以修改为:printf("create error:%s\n",strerror(errno));
perror不可打印变量值


2、open 
函数原型:int open(const *pathname, int flag)
flag:O_RDNLY    O_WONLY    O_RDWR    O_APPEND可追加


例子:
open(argv[1],O_RDWR);
返回值:成功则返回文件描述符,失败返回-1
假设返回的文件描述符是4,则对4操作就是对文件操作


如果没有这个文件则:fd = open("hello.c",O_RDWR | O_CREATE,0655);
权限修改为没有文件就创建,所以以后不用create,直接用open;


3、close:
close(fd);


4、write:
例子:换行写入:
int i;
char buf[100];


for(i = 0; i < 3; i++)
{
    memset(buf,0,sizeof(buf));
    
    scanf("%s",buf);
    write(fd,buf,strlen(buf));
    write(fd,"\n",1);
}


5、read
原型:read(int fd,void *buf,sizeof_t count)


例子:使用上例文件内容读取:
int r_len= read(fd,buf,sizeof(buf));


if(r_len == -1)
{
    perror("read error!\n");
    exit(1);
}


6、文件读写位置:
将指针移到刚开始的读写位置:lseek(int fildes,off_t offset, int whence);
whence : SEEK_SET    文件开头    SEEK_CUR    当前位置    SEEK_END    文件末尾


例子:lseek(fd,18,SEEK_END);    相对于文件末尾位移18
lseek返回值:错误返回-1,正确返回文件指针距离文件开头位置的长度


7、fopen:
函数原型:FILE *fopen(const char *path,char *mode);
例子:FILE *fp = fopen(argv[1],"a+");
           if(fp == NULL)
           {
               printf("open error!\n");
               exit(1);
           }


8、fwrite:


返回值:实际写入多少字节
9、fread:


10、fseek
例子:fseek(fp,0,SEEK_SET);

11、fgetc和fputc


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值