linux基础I/O函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ferlan/article/details/83188098

open: 打开文件

	  #include<fcntl.h>
      int open(const char *pathname,int flags,mode_t mode);
      解释:
        pathname:要打开的文件名称
        flags:标志选项
                必选项:(相互冲突,只能3选1)
                        O_RDONLY 只读
                        O_WRONLY只写
                        O_RDWR     读写
                非必选项:
                        O_CREAT    若文件存在再打开,不存在就创建(需要指定新创建文件的权限,比如(0664))
                        O_EXCL        与O_CREAT同用时,若文件存在则报错
                        O_TRUNC    若文件存在则将文件长度截断为0(即将文件内容清空)
                        O_APPEND 追加 (不添加则默认每次写入为覆盖写入)
                   
  	    mode(如果源文件存在则不需要该参数):若文件不存在需要创建的时候,用于指定闯将的文件权限返回值:
                
        返回值: 成功:非负整数(文件描述符),后续操作都通过描述符完成
                失败:-1

这里要对open的第二个参数进行说明,必选项3个必选1个,非必选项可要可不要,如果要添加非必选项,中间用按位或‘ | ’,且当源文件不存在,你使用O_CREATE时,要添加第三个参数MODE,用于设置新文件的权限值,比如0664。
当然可以使用umask来修改创建文件的权限掩码,但代码中的umask仅对当前进程有用。

open("test.txt,O_RDONLY|O_CREATE,0664")

write:写入数据

功能:从buff中向fd所代表的文件写入count个字节的数据。

ssize_t write(int fd, const void *buf, size_t count);
	解释:
			fd:文件描述符
			buf:写入数据的字符串
			count:要求写入数据的长度(字节)

	返回值:
			成功:	返回真正写入的数据长度
			失败:   返回-1

在写入时,count指定了想要实际写入的长度,比如很长的一个字符串,count设置为1,则只写入1个字符。

read :读取数据

功能:从fd所代表的文件中读取count字节长度的数据放到buf中。

ssize_t read(int fd, void *buf, size_t count);
	解释:fd:文件描述符
			  buf:读出的数据放进buf
			  count:想要读取的数据长度
	返回值:
			  成功:实际读入的数据长度
			  失败:返回-1

倘若读取数据的位置在文件末尾,则读不到任何数据,返回值为0

lseek:改变文件读写位置

off_t lseek(int fd, off_t offset, int whence);
	解释:fd:文件描述符
		 offset:偏移量
		 whence:起始偏移位置
		 	可选项:
		 		SEEK_SET:起始位置
		 		SEEK_CUR:当前位置
		 		SEEK_END:末尾位置

比如:lseek(fd,0,SEEK_SET);
解释:跳转fd所代表的文件读写位置至起始位置的0偏移量处

close:关闭文件描述符

猜你喜欢

转载自blog.csdn.net/Ferlan/article/details/83188098