- UID
- 1029342
- 性别
- 男
|
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;
} |
|