linux open命令

open命令用于打开文件,使用时需要引用头文件<fcntl.h>,若失败,返回-1,否则返回正整数,0是标准输入流,1是标准输出流,2是标准错误流,其他文件从3开始递增。函数定义如下
__extern_always_inline int
open (__const char *__path, int __oflag, ...)
{
  if (__va_arg_pack_len () > 1)
    __open_too_many_args ();

  if (__builtin_constant_p (__oflag))
    {
      if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () < 1)
	{
	  __open_missing_mode ();
	  return __open_2 (__path, __oflag);
	}
      return __open_alias (__path, __oflag, __va_arg_pack ());
    }

  if (__va_arg_pack_len () < 1)
    return __open_2 (__path, __oflag);

  return __open_alias (__path, __oflag, __va_arg_pack ());
}

入参中,__path是要打开或创建的文件路径,__oflag是标记,用来标识要打开或创建的文件所拥有的权限,由主flag和备flag组成,主flag有O_RDONLY, O_WRONLY, O_RDWR,分别表示只读,只写,读写,三者必有其一,备flag可以自由选择,常用的一个备flag是O_CREAT,用于在没有该文件的时候,在__path路径下创建该文件。可以附加第三个参数,类型为mode_t,是8进制数,用3位分别表示所有者权限、群组权限、其他用户权限,每位由4 | 2 | 1组成,4是读,2是写,1是执行,例如0600表示所有者拥有读写权限(6 = 4 | 2)。一个示例代码:

#ifdef _cplusplus
extern "C" {
#endif

#include <stdio.h>
#include <string.h>
#include <fcntl.h>		//for open
#include <stdlib.h>		//for printf


void main(argc, argv)
	int argc;
	char ** argv;
{
	char * filename = "lala";			//要创建的文件
	char * str = "hello, world\n";		//要向文件中写入的内容
	int fd1 = open(filename, O_RDWR | O_CREAT, 0644);
	printf("tmp = %d\n", fd1);
	write(fd1, str, strlen(str) + 1);
	system("cat lala");
	
	int fd2 = open(filename, O_CREAT | O_WRONLY | O_EXCL, 0600);
	if (-1 == fd2)
	{
		fd2 = open(filename, O_WRONLY | O_EXCL | O_TRUNC, 0600);
		printf("fd = %d\n", fd2);		//fd2的值会比fd1大1
	}
	close(fd1);
	close(fd2);
	system("cat lala");
}




#ifdef _cplusplus
}
#endif

效果如下



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值