tag 标签: 文件描述符、文件系统调用

相关博文
  • 热度 18
    2015-3-4 18:21
    785 次阅读|
    0 个评论
    2.6   定位文件 2.6.1   函数名           lseek    2.6.2   函数原形         off_t lseek(int fd, off_t offset, int whence); 2.6.3   函数功能         重新定位文件的读写位置 2.6.4   所属头文件       sys/types.h unistd.h 2.6.5   返回值           成功:返回移动后的文件距离头文件的位置  失败:-1 2.6.6   参数说明         fd:要定位的文件的文件描述符                        offset:偏移量                        whence:SEEK_SET:将该文件的偏移量设置为距文件开始处的offset个字节                             SEEK_CUR:将该文件的偏移量设置为距当前值加offset,offset可正可负。                                SEEK_END:将该文件的偏移量设置为文件长度加offset个字节,offset可正可负。   2.7   复制文件描述符 2.7.1   函数名           dup 2.7.2   函数原形         int dup(int oldfd);   int dup2(int oldfd, int newfd);   2.7.3   函数功能         复制一个文件描述符 2.7.4   所属头文件       unistd.h 2.7.5   返回值           成功:返回新的文件描述符  失败:-1 2.7.6   参数说明         oldfd:待复制的老的文件描述符                       newfd:dup2则可以用newfd参数指定新描述的数值。如果newfd已经打开,则先将其关闭。如若oldfd等于newfd,则dup2返回newfd,而不关闭它。   小实验:创建一个aim.c文件,且将hello.c中的前10个字节复制到aim.c中 附录: #includestdio.h #includesys/types.h   #includesys/stat.h    #include fcntl.h #includeunistd.h int main() {      int fd1 = 0;      int fd2 = 0;      int read_flag = 0;      int write_flag = 0;      char read_buf ;      fd1 = open("/home/copy_commander/hello.c",O_RDWR);        fd2 = open("/home/copy_commander/aim.c",O_RDWR|O_CREAT,S_IRWXU);        if(fd1 = 0)      {           read_flag = read(fd1, read_buf, 10);           if(read_flag = 0)           {                write_flag = write(fd2, read_buf, 10);                if(write_flag = 0)                {                     printf("please check the file!\n");                }                else                     printf("write error!\n");           }           else           {                printf("read error!\n");           }      }      else      {           printf("open error!\n");      }      close(fd1);      close(fd2);      return 0; }
  • 热度 14
    2015-3-4 18:19
    898 次阅读|
    0 个评论
    对于内核而言,所有打开的文件通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或creat返回的文件描述符标识该文件,将其作为参数传送给read或write。 2.1   打开文件 2.1.1   函数名       open  2.1.2   函数原形    int open(const char *pathname,int flags);   int open(const char *pathname,int flags, mode_t mode); 2.1.3   函数功能   打开或者创建一个文件     2.1.4   所属头文件 sys/types.h sys/stat.h  fctl.h 2.1.5   返回值   成功:文件描述符   失败:-1 2.1.6   参数说明  pathname:要打开的文件名(含路径)                 flags:文件打开的标志                   O_RDONLY:只读                   O_WRONLY:只写                   O_RDWR:可读、可写 以上三个常量是必须包含其一的,下面的这两个是可选择的:                   O_APPEND:以追加方式打开文件                   O_CREAT:当打开的文件不存在的时候,创建该文件                   mode:一定是flags中使用了O_CREAT标志,mode记录不同用户对创建的文件的权限。 2.2   创建文件      2.1.1   函数名   creat 2.1.2   函数原形    int creat(const char* pathname, mode_t mode);     2.1.3   函数功能  创建一个文件   2.1.4   所属头文件 sys/types.h sys/stat.h  fctl.h 2.1.5   返回值   成功:文件描述符   失败:-1 2.1.6   参数说明  pathname:要打开的文件名(含路径)                mode:创建的文件的读写权限 2.3   关闭文件 2.3.1   函数名  close 2.3.2   函数原形  int close(int fd); 2.3.3   函数功能  关闭一个文件 2.3.4   所属头文件 unistd.h 2.3.5   返回值     成功:0   失败:-1 2.3.6   参数说明   fd:待关闭的文件描述符 2.4   读文件 2.4.1   函数名     read 2.4.2   函数原形  ssize_t read(int fd, void *buf, size_t count); 2.4.3   函数功能   从一个打开的文件中读取数据 2.4.4   所属头文件  unistd.h 2.4.5   返回值      成功:返回读取的字节数  失败:-1 2.4.6   参数说明    fd:待读取的文件的文件描述符              buf:读取来的数据存放在buf里。              count:想要读取的字节数 2.5   写文件 2.5.1   函数名    write 2.5.2   函数原形  ssize_t write(int fd, const void *buf, size_t count); 2.5.3   函数功能   向一个打开的文件中写入数据 2.5.4   所属头文件  unistd.h 2.5.5   返回值      成功:写入到文件里的字节数  失败:-1 2.5.6   参数说明    fd:要写入数据的文件的文件描述符                   buf:要写入的数据的存放位置                  count:要写入的数据的字节数