Linux标准IO定位函数,Linux C标准IO库函数详解 一 |
您所在的位置:网站首页 › gta5线上促销 › Linux标准IO定位函数,Linux C标准IO库函数详解 一 |
1、open/close函数 open函数可以打开或者创建一个文件。 #include #include #include int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 返回值:成功返回新分配的文件描述符,出错返回-1并设置errno close函数关闭一个已打开的文件: #include int close(int fd); 返回值:成功返回0,出错返回-1并设置errno 使用这个函数注意一下几点: (1)pathname可以是相对路径,也可以是绝对路径 (2)flags有一系列参数可以选择: O_RDONLY 只读打开 O_WRONLY 只写打开 O_RDWR 可读可写打开 O_APPEND 表示追加。如果文件已有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容。 O_CREAT 若此文件不存在则创建它。使用此选项时需要提供第三个参数mode,表示该文件的访问权限. O_EXCL 如果同时指定了O_CREAT,并且文件已存在,则出错返回 O_TRUNC 如果文件已存在,并且以只写或可读可写方式打开,则将其长度截断(Truncate) 为0字节 2、read/write函数 read函数从打开的设备或文件中读取数据: #include ssize_t read(int fd, void *buf, size_t count); 返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文 件末尾,则这次read返回0 write函数向打开的设备或文件中写数据: #include ssize_t write(int fd, const void *buf, size_t count); 返回值:成功返回写入的字节数,出错返回-1并设置errno 3、recv/send函数 recv函数和read函数功能差不多:使用的时候一般把flags赋值为0 #include #include ssize_t recv(int sockfd, void *buf, size_t len, int flags); send函数和write函数功能差不多: #include #include ssize_t send(int sockfd, const void *buf, size_t len, int flags); 4、lseek/fseek函数 设置读写文件的位置,每个打开的文件都记录着当前读写位置,打开文件时读写位置是0,表示文件开头,通常读写多少个字节就会将读写位置往后移多少个字节。但是有一个例外,如果以O_APPEND方式打开,每次写操作都会在文件末尾追加数据,然后将读写位置移到新的文件末尾。 lseek和标准I/O库的fseek函数类似,可以移动当前读写位置(或者叫偏移量). #include #include off_t lseek(int fd, off_t offset, int whence); #include int fseek(FILE *stream, long offset, int whence); 使用注意事项: whence表示处于文件的位置,有如下三个选项: SEEK_SET 将读写位置指向文件头后再增加offset个位移量。 SEEK_CUR 以目前的读写位置往后增加offset个位移量。 SEEK_END 将读写位置指向文件尾后再增加offset个位移量。 IO库函数的使用: #include #include #include #include #include #include #include #include #include int main() { char* filename = "./hello.txt"; int nFd = 0, nRet = 0; int nReadLen = 0; char szBuff[BUFSIZ] = {0}; /* 以读写的方式打开文件 */ nFd = open(filename,O_RDWR); if(nFd < 0) { perror("open:"); return 1; } /* 读取文件的内容 */ nReadLen = read(nFd,szBuff,BUFSIZ); if(nReadLen > 0) { printf("read file data: %s\n",szBuff); } else { perror("read:"); } /* 往文件里面写入内容 */ char szWrData[] = {"You are small"}; write(nFd,szWrData,strlen(szWrData)); /* 再次读取文件的内容 */ memset(szBuff,0,BUFSIZ); /* 由于当前的文件位置指针已经指向了文件的末尾,现在再次读取的时候需要把文件的位置指针设置到文件的开头 */ lseek(nFd,0,SEEK_SET); nReadLen = read(nFd,szBuff,BUFSIZ); if(nReadLen > 0) { printf("read file data: %s\n",szBuff); } else { perror("read:"); } /* 关闭文件 */ close(nFd); return 0; } |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |