/*
* linux/lib/open.c
*
* (C) 1991 Linus Torvalds
*/

#define __LIBRARY__
#include <unistd.h>		// Linux ׼ͷļ˸ַųͣ˸ֺ
// 綨__LIBRARY__򻹰ϵͳúźǶ_syscall0()ȡ
#include <stdarg.h>		// ׼ͷļԺʽбҪ˵-
// (va_list)(va_start, va_arg va_end)
// vsprintfvprintfvfprintf 

//// ļ
// 򿪲пܴһļ
// filename - ļflag - ļ򿪱־...
// أļó룬-1
int
open (const char *filename, int flag, ...)
{
  register int res;
  va_list arg;

// va_start()꺯ȡflag ָ룬Ȼϵͳжint 0x80open 
// ļ򿪲
// %0 - eax(ص)%1 - eax(ϵͳжϵùܺ__NR_open)
// %2 - ebx(ļfilename)%3 - ecx(ļ־flag)%4 - edx(ļmode)
  va_start (arg, flag);
__asm__ ("int $0x80": "=a" (res):"" (__NR_open), "b" (filename), "c" (flag),
	   "d" (va_arg (arg, int)));
// ϵͳжϵ÷ֵڻ0ʾһļֱӷ֮
  if (res >= 0)
    return res;
// ˵ֵС0һ롣øó벢-1
  errno = -res;
  return -1;
}
