非缓冲区文件操作

open() 函数
 

两个参数的版本:

#include <fcntl.h>
int open(const char *pathname, int flags);
pathname 是要打开的文件的路径。
flags 是一个或多个标志,用来指定文件的打开方式。
三个参数的版本:

#include <fcntl.h>
int open(const char *pathname, int flags, mode_t mode);
pathname 是要打开的文件的路径。
flags 是一个或多个标志,用来指定文件的打开方式。
mode 是文件的权限模式,当创建新文件时使用。
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
    // 打开一个文件用于读取
    const char *filename = "example.txt";
    int fd = open(filename, O_RDONLY);
    if (fd == -1) {
        perror("open");
        exit(EXIT_FAILURE);
    }

    // 假设我们知道文件大小为 100 字节
    char buffer[100];
    ssize_t bytes_read = read(fd, buffer, sizeof(buffer));

    if (bytes_read == -1) {
        perror("read");
        close(fd);
        exit(EXIT_FAILURE);
    }

    // 打印读取的数据
    write(STDOUT_FILENO, buffer, bytes_read);

    // 关闭文件描述符
    close(fd);

    return 0;
}
我们包含了 fcntl.h 头文件,这是使用 open() 函数所必需的。
我们尝试打开一个名为 example.txt 的文件用于只读访问(O_RDONLY)。
如果 open() 函数失败(返回 -1),我们使用 perror() 函数打印错误信息并退出程序。
我们定义了一个缓冲区 buffer 来存储从文件中读取的数据。
我们使用 read() 函数从文件描述符 fd 中读取数据到 buffer。
如果 read() 函数失败,我们打印错误信息,关闭文件描述符,并退出程序。
我们使用 write() 函数将读取的数据打印到标准输出。
最后,我们使用 close() 函数关闭文件描述符。

write/read ()函数:

函数的原型如下:

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

fd 是一个文件描述符,它是一个整数,用于表示一个已经打开的文件。
buf 是一个指向数据缓冲区的指针,包含了要写入的数据。
count 是要写入的字节数。
函数返回写入的字节数,如果写入失败,它返回 -1。
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main() {
    const char *message = "Hello, World!\n";
    int fd = STDOUT_FILENO; // 标准输出的文件描述符
    size_t message_len = strlen(message) + 1; // 包括字符串结束符 '\0'
    
    ssize_t bytes_written = write(fd, message, message_len);
    if (bytes_written == -1) {
        perror("write");
        return 1;
    }

    printf("成功写入 %ld 字节\n", (long)bytes_written);
    return 0;
}
  1. 我们包含了 unistd.h 头文件,这是使用 write() 函数所必需的。
  2. 我们定义了一个字符串 message,包含了要写入的内容。
  3. 我们使用 STDOUT_FILENO 宏来获取标准输出的文件描述符,这通常用于写入到控制台。
  4. 我们计算了消息的长度,包括字符串结束符 \0
  5. 我们调用 write() 函数来尝试写入消息。
  6. 如果 write() 函数返回 -1,我们使用 perror() 函数打印错误信息。
  7. 如果写入成功,我们使用 printf() 函数打印写入的字节数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值