open.c

来自「LINUX 0.11版内核代码。 并有代码分析说明。」· C语言 代码 · 共 38 行

C
38
字号
/** 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),用于// vsprintf、vprintf、vfprintf 函数。//// 打开文件函数。// 打开并有可能创建一个文件。// 参数:filename - 文件名;flag - 文件打开标志;...// 返回:文件描述符,若出错则置出错码,并返回-1。intopen (const char *filename, int flag, ...){  register int res;  va_list arg;// 利用va_start()宏函数,取得flag 后面参数的指针,然后调用系统中断int 0x80,功能open 进行// 文件打开操作。// %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;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?