例子:
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
main()
{
int fd, size1, size2;
char s[] = "i love my mother!", buffer[80];
fd = open("gu", O_WRONLY | O_CREAT);
size1 = write(fd, s, sizeof(s));
close(fd);
fd =open("gu", O_RDONLY);
size2 = read(fd, buffer, sizeof(buffer));
close(fd);
printf("size1 = %d/nsize2 = %d/n",size1, size2);
printf("%s/n", buffer);
}
-------------------------------------------------------------------------------
详解:
(1)open()函数
fd = open("gu", O_WRONLY | O_CREAT);
1.打开gu这个文件,且以只写的方式打开,如不存在则创建一个。
2.返回值为一个整型
open()函数原型:int open(const char *pathname, int flags)
参数pathname指向欲打开的文件路径字符串
(2)write()函数
文件已经打开了,现在开始写:
size1 = write(fd, s, sizeof(s));
write()函数的原型:int write(int fd, const void *buf, int count);
1.即:把参数buf所指的内存写入count个字节到参数fd所指的文件内。(文件读写位置也随之移动)
2.返回值,如果顺利write() 会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中
(3)read()函数 //read不是显示在屏幕上 它只不过读到缓冲区里 要显示在终端还要加上printf从缓冲区里读出
文件要打开,才可以读:
fd =open("gu", O_RDONLY);
size2 = read(fd, buffer, sizeof(buffer)); 加上:printf("%s/n", buffer);才可在终端显示
read()函数原型:int read(int fd, void *buf, int count);
1.read() 从参数fd所指的文件中传送count个字节到buf所指的内存中
2.返回值:如果顺利返回实际读到的字节数(最好将返回值与count做比较,如返回的字节数比所要求读取的字节数少,可能读到了文件尾,从 pipe或终端机读取,或者是read() 被信号中断了读取动作),错误时返回-1,错误代码存入errno中
(4)常用的文件权限:
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
O_RDWR 以可读写方式打开文件 注:这三种方式是互斥的,不可以同时使用
O_CREAT 若欲打开的文件不存在则自动建立该文件