APUE NOTE
lseek
Function Prototype
1 |
|
Whence
- 若wh enc e是SEEK_S E T,则将该文件的位移量设置为距文件开始处 offset 个字节。
- 若whence是SEEK_ CUR,则将该文件的位移量设置为其当前值加offset, offset可为正或负。
- 若when ce是SEEK_END,则将该文件的位移量设置为文件长度加offset, offset可为正或负。
- 若lse ek成功执行,则返回新的文件位移量,为此可以用下列方式确定一个打开文件的当前位移量:
1
2off_t currpos;
currpos = lseek(fd, 0, SEEK_CUR);
readv, writev
readv和writev函数用于在一个函数调用中读、写多个非连续缓存. 有时也将这两个函数称为散布读(scatter read)和聚集写(gather write).
Function Prototype
1 |
|
这两个函数的第二个参数是指向 iovec结构数组的一个指针:1
2
3
4struct iovec {
void* iov_base; /* starting address of buffer */
size_t iov_len; /* size of buffer */
};
- writev以顺序iov[0], iov[1]至iov[iovcnt-1] 从缓存中聚集输出数据. writev返回输出的字节总数,它应等于所有缓存长度之和.
- readv则将读入的数据按上述同样顺序散布到缓存中. readv总是先填满一个缓存, 然后再填写下一个. readv返回读得的总字节数. 如果遇到文件结尾,已无数据可读, 则返回0.
getopt
Function Prototype
1 | int getopt(int argc,char * const argv[ ],const char * optstring); |
getopt() 所设置的全局变量包括:
1 | optarg——指向当前选项参数(如果有)的指针。 |
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)