APUE

APUE NOTE

lseek

Function Prototype

1
2
3
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
// 返回:若成功为新的文件位移,若出错为- 1

Whence

  • 若wh enc e是SEEK_S E T,则将该文件的位移量设置为距文件开始处 offset 个字节。
  • 若whence是SEEK_ CUR,则将该文件的位移量设置为其当前值加offset, offset可为正或负。
  • 若when ce是SEEK_END,则将该文件的位移量设置为文件长度加offset, offset可为正或负。
  • 若lse ek成功执行,则返回新的文件位移量,为此可以用下列方式确定一个打开文件的当前位移量:
    1
    2
    off_t currpos;
    currpos = lseek(fd, 0, SEEK_CUR);

readv, writev

readv和writev函数用于在一个函数调用中读、写多个非连续缓存. 有时也将这两个函数称为散布读(scatter read)和聚集写(gather write).

Function Prototype

1
2
3
4
#include <sys/uio.h>
ssize_t readv(int fd, const struct iovec *iov, int iovcnt);
ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
//两个函数返回:已读、写的字节数,若出错则为 - 1

这两个函数的第二个参数是指向 iovec结构数组的一个指针:

1
2
3
4
struct iovec {
void* iov_base; /* starting address of buffer */
size_t iov_len; /* size of buffer */
};

iovec

  • writev以顺序iov[0], iov[1]至iov[iovcnt-1] 从缓存中聚集输出数据. writev返回输出的字节总数,它应等于所有缓存长度之和.
  • readv则将读入的数据按上述同样顺序散布到缓存中. readv总是先填满一个缓存, 然后再填写下一个. readv返回读得的总字节数. 如果遇到文件结尾,已无数据可读, 则返回0.

getopt

Function Prototype

1
2
3
int getopt(int argc,char * const argv[ ],const char * optstring);
extern char *optarg;
extern int optind, opterr, optopt;

getopt() 所设置的全局变量包括:

1
2
3
optarg——指向当前选项参数(如果有)的指针。 
optind——再次调用 getopt() 时的下一个 argv 指针的索引。
optopt——最后一个未知选项。

Global Variable in getopt()

optarg —— 指向当前选项参数(如果有)的指针。 
optind —— 再次调用 getopt() 时的下一个 argv 指针的索引 
optopt —— 最后一个未知选项

Complement

optstring中的指定的内容的意义
例如 getopt(argc, argv, "ab:c:de::");
    1.单个字符,表示选项,(如上例中的abcde各为一个选项)
    2.单个字符后接一个冒号:表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。(如上例中的b:c:)
    3.单个字符后跟两个冒号,表示该选项后可以跟一个参数,也可以不跟。如果跟一个参数,参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。(如上例中的e::,如果没有跟参数,则optarg = NULL)
Contents
  1. 1. APUE NOTE
    1. 1.1. lseek
      1. 1.1.1. Function Prototype
      2. 1.1.2. Whence
    2. 1.2. readv, writev
      1. 1.2.1. Function Prototype
    3. 1.3. getopt
      1. 1.3.1. Function Prototype
      2. 1.3.2. getopt() 所设置的全局变量包括:
      3. 1.3.3. Global Variable in getopt()
      4. 1.3.4. Complement