首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

文件IO函数操作大全

文件IO函数操作大全

printf("%d %s %d\n", student[1].number, student[1].name, student[1].age);
    close(fd);
    return 0;
}
#endif
#if 1
int main(int argc, char **argv)
{
    int fd = open(argv[1], O_RDONLY);
    float f[2];
    read(fd, f, sizeof(f));
    printf("%g\n", f[0]);
    printf("%g\n", f[1]);
    close(fd);
    return 0;
}
#endif
write 在一个文件描述符上执行写操作
概述
       #include
       ssize_t write(int fd, const void *buf, size_t count);
描述
       write   向文件描述符   fd   所引用的文件中写入  从  buf  开始的缓冲区中  count  字节的数据.
       POSIX规定,当使用了write()之后再使用  read(),那么读取到的应该是更新后的数据.
       但请注意并不是所有的文件系统都是 POSIX兼容的.
返回值
       成功时返回所写入的字节数(若为零则表示没有写入数据).  错误时返回-1,并置errno为相应值.
       若count为零,对于普通文件无任何影响,但对特殊文件 将产生不可预料的后果.
范例:
点击(此处)折叠或打开
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#if 0
struct
{
    int number;
    char name[32];
    int age;
}student[2] = {{1, "niu", 20}, {2, "zhang", 50}};
int main(int argc, char **argv)
{
    int fd = open(argv[1], O_WRONLY|O_CREAT, 0666);
    write(fd, student, sizeof(student));
    close(fd);
    return 0;
}
#endif
#if 1
int main(int argc, char **argv)
{
    int fd = open(argv[1], O_WRONLY|O_CREAT, 0666);
    float f[2] = {1.234, 112.456};
    write(fd, f, sizeof(f));
    close(fd);
    return 0;
}
#endif
lseek 显示定位一个已经打开的文件
总览:
       #include
       #include
       off_t lseek(int fd, off_t offset, int whence);
描述:

每个打开的文件都有一个与其相关的“当前文件位移量”,它是一个非负整数,用以度量从文件开始处计算的字节数。
通常,读/写操作都从当前文件位移量处开始,在读/写调用成功后,使位移量增加所读或者所写的字节数。
lseek()调用成功为新的文件位移量失败返回- 1 并设置errno。
lseek()只对常规文件有效,对socket 、管道、FIFO等进行lseek()操作失败。
lseek()仅将当前文件的位移量记录在内核中,它并不引起任何I/O 操作。
文件位移量可以大于文件的当前长度,在这种情况下,对该文件的写操作会延长文件,并形成空洞。
范例:
点击(此处)折叠或打开
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char **argv)
{
    int fd = open(argv[1], O_RDWR|O_CREAT, 0666);
    printf("%ld\n", lseek(fd, 0, SEEK_CUR));
    write(fd, "n", 1);
    printf("%ld\n", lseek(fd, 0, SEEK_CUR));
    write(fd, "iu good man", 11);
    printf("%ld\n", lseek(fd, 0, SEEK_CUR));
    lseek(fd, 0, SEEK_SET);
    write(fd, "N", 1);
    lseek(fd, 4, SEEK_SET);
    write(fd, "G", 1);
    lseek(fd, 9, SEEK_SET);
    write(fd, "M", 1);
   
    return 0;
}
继承事业,薪火相传
返回列表