?? open.c
字號:
/** 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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -