linux系统编程之文件与I/O(二) 文件的读取写入
以下程序使用TIOCGWINSZ命令获得终端设备的窗口大小。 #include <stdio.h> #include <stdlib.h #include <unistd.h> #include <sys/ioctl.h int main(void) { struct winsize size; if (isatty(STDOUT_FILENO) == 0) exit(1); if(ioctl(STDOUT_FILENO, TIOCGWINSZ, &size) < 0) { perror("ioctl TIOCGWINSZ error"); exit(1); } printf("%d rows, %d columnsn", size.ws_row, size.ws_col); return 0; } 在图形界面的终端里多次改变终端窗口的大小并运行该程序,观察结果。 四、文件的随机读写 到目前为止的所有文件访问都是顺序访问。这是因为所有的读和写都从当前文件的偏移位置开始,然后文件偏移值自动地增加到刚好超出读或写结束时的位置,使它为下一次访问作好准备。 有个文件偏移这样的机制,在Linux系统中,随机访问就变得很简单,你所需做的只是将当前文件移值改变到有关的位置,它将迫使一次read()或write()发生在这一位置。(除非文件被O_APPEND打开,在这种情况下,任何write调用仍将发生在文件结束处) lseek系统调用: 功能说明:通过指定相对于开始位置、当前位置或末尾位置的字节数来重定位,这取决于 lseek() 函数中指定的位置 函数原型:off_t lseek (int fd, off_t offset, int base); 函数参数: fd:需要设置的文件描述符 offset:偏移量 base:偏移基位置 返回值:返回新的文件偏移值 base 表示搜索的起始位置,有以下几个值:(这些值定义在<unistd.h>) base 文件位置 SEEK_SET 从文件开始处计算偏移 SEEK_CUR 从当前文件的偏移值计算偏移 SEEK_END 从文件的结束处计算偏移 (编辑:滁州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |