这两个函数都是unbuffered的,也就是直接写入的。
读文件:
函数原型:
|
1 2 3 |
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count); |
read函数尝试从fd所指的文件处读出count数量的字节,然后存到buf所指的缓冲区里。 继续阅读
这两个函数都是unbuffered的,也就是直接写入的。
读文件:
函数原型:
|
1 2 3 |
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count); |
read函数尝试从fd所指的文件处读出count数量的字节,然后存到buf所指的缓冲区里。 继续阅读
lseek函数主要用来改变文件偏移量。
函数原型为:
|
1 2 3 4 |
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence); |
其中whence有以下几种类型:
| SEEK_SET | 0 | 偏移值是offset |
| SEEK_CUR | 1 | 偏移值是offset加当前位置 |
| SEEK_END | 2 | 偏移值是offset加文件大小 |
不建议直接用数值。 继续阅读
mrtg 是一个非常流行的流量统计工具。虽然看起来有点过时了,当然也有以下几点好处:
1.我只有一台机器要用,比如我的个人网站.为了一个小服务器搞个cacti不值.象这样MRTG还是很方便的.
man open 里东西好多,终于都看了一遍.
转载请注明出处
函数原型:
|
1 2 3 4 5 6 7 8 |
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode); |
其中flags必须包括以下一些参数:
| O_RDONLY | 只读模式打开 |
| O_WRONLY | 只写模式打开 |
| O_RDWR | 读写都可以 |
还可以包括以下一些参数:
| O_APPEND | 当加入这个标志以后,每次写入文件的时候都会从末尾写入。 |
| O_CREAT | 当文件不存在的时候创建新文件。 |
| O_EXCL | 当O_CREAT标志存在且文件存在的时候输出错误。 |
| O_TRUNC | 当文件存在且被另一个程序以可写模式打开时,把文件的长度截短为0(不明白什么意思),如果是从FIFO(先入先出)设备读取的,那么忽略这个参数。 |
| O_NOCTTY | 如果pathname是一个终端,则不将该设备分配给进程作为控制终端 |
| O_NONBLOCK | 如果可以,比如打开一个FIFO文件,以非阻塞的形式打开文件(对文件进行写入的时候不暂停进程)。 |
注:当O_CREAT参数有效的时候,mode参数有效,用于表示创建的文件的权限; 继续阅读
在Linux内核里,每个打开的文件都有一个对应的文件描述符。每个文件描述符是一个非负整数,当程序打开一个文件的时候,内核就把对应的文件描述符发给这个进程。而程序就通过这个文件描述符来识别不同的文件。
按照惯例,0被用来描述标准输入,1是标准输出,2是标准错误输出。
在程序里,最好用STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO
取代这三个数,这三个常数在<unistd.h>里定义。
文件描述符的最大值是 OPEN_MAX;