[GNU/Linux]Linux下读写文件

  • 以写方式打开文件
    int fd = open(“/home/mytest/123.txt”,
    O_WRONLY | O_CREAT,
    0644);
    参数1: 文件路径
    参数2:     标识位,O_WRONLY表示写入,
    O_CREAT表示当不存在时,创建新文件
    参数:0644,表示创建文件时的权限位
    (0644: 字面常量,8进制)

 

  • 以读方式打开文件
    int fd = open(“/home/mytest/123.txt”,
    O_RDONLY);
    参数1:文件路径
    参数2:O_RDONLY: 以只读方式打开
    参数3:省略

 

  • 写文件:
    write(fd,  buf,  n);
    读文件:
    int n = read(fd, buf, maxsize);
    关闭文件:
    close(fd);
    fd:  file descriptor文件描述符,是一个整数

 

  • 以下三者选一:
    O_RDONLY 只读方式
    O_WRONLY 以只写方式打开文件
    O_RDWR 以可读写方式打开文件
    额外的标识位:
    O_CREAT可与O_WRONLY联用,若欲打开的文件不存在则自
    动建立该文件
    O_TRUNC  可与O_WRONLY联用,在打开文件时清空文件
    O_APPEND可与O_WRONLY联用,表示追加内容
    O_NONBLOCK 表示以“非阻塞”方式读/写数据时

read.cpp

// ANSI C
#include <stdio.h>

// Linux API
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


int main()
{
    // 注:你是否对/home/mytest/123.txt有读权限
    int fd = open("/home/mytest/123.txt", O_RDONLY);
    if(fd < 0)
    {
        printf("failed to open file!\n");
        return -1;
    }
    
    char data[12];
    int n = read(fd, data, 12);	
    if(n>0)
    {
        data[n] = 0;
        printf("read: %s \n", data);
    }
    close(fd);
}

write.cpp

// ANSI C
#include <stdio.h>

// Linux API
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


int main()
{
    // 注:你是否对/home/mytest/目录有写权限?
    int fd = open("/home/mytest/123.txt", 
            O_WRONLY|O_CREAT, 
            0644);
    if(fd < 0)
    {
        printf("failed to open file!\n");
        return -1;
    }
    
    char data[12] = "hello";
    write(fd, data, 5);	
    close(fd);
}

stdc.cpp

// ANSI C
#include <stdio.h>
#include <string.h>

int main()
{
    // 注:你是否对/home/mytest/目录有写权限?
    FILE* fp = fopen("/home/mytest/aaa.txt", "wb");
    if(!fp)
    {
        // 无权访问
        printf("failed to open file!\n");
        return -1;
    }
    
    // 使用linux的标准换行符\n
    char buf[] = "hello\nworld\n";
    fwrite(buf, 1, strlen(buf), fp);
    fclose(fp);
}

 

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注