����14-12 linux/include/unistd.h
1 #ifndef _UNISTD_H
2 #define _UNISTD_H
3
4 /* ok, this may be a joke, but I'm working on it */
/* ok, ��Ҳ���Ǹ���Ц�������������ִ��� */
// ������ų���ָ������IEEE��1003.1ʵ�ֵİ汾�ţ���һ������ֵ��
5 #define _POSIX_VERSION 198808L
6
// chown()��fchown()��ʹ�������ڽ��̵�Ȩ�ޡ�/* ֻ�г����û�����ִ��chown������..��*/
7 #define _POSIX_CHOWN_RESTRICTED /* only root can do a chown (I think..) */
// ����(NAME_MAX)��·�������������������Զ��ضϡ�/* ·�������ضϣ������뿴�ں˴��룩*/
8 #define _POSIX_NO_TRUNC /* no pathname truncation (but see in kernel) */
// ����������Ž�������ַ�ֵ����ֵ����ֹ�ն˶���Ĵ�����/* ��ֹ��^C�������ַ� */
// _POSIX_VDISABLE���ڿ����ն�ijЩ�����ַ��Ĺ��ܡ���һ���ն�termios�ṹ��c_cc[]
// ����ij���ַ�����ֵ����_POSIX_VDISABLE��ֵʱ����ʾ��ֹʹ����Ӧ�������ַ���
9 #define _POSIX_VDISABLE '\0' /* character to disable things like ^C */
// ϵͳʵ��֧����ҵ���ơ�
10 #define _POSIX_JOB_CONTROL
// ÿ�����̶���һ�����set-user-ID��һ�����set-group-ID�� /* �Ѿ�ʵ�֡� */
11 #define _POSIX_SAVED_IDS /* Implemented, for whatever good it is */
12
13 #define STDIN_FILENO 0 // �������ļ���������������š�
14 #define STDOUT_FILENO 1 // ������ļ�����š�
15 #define STDERR_FILENO 2 // �������ļ�����š�
16
17 #ifndef NULL
18 #define NULL ((void *)0) // �����ָ�롣
19 #endif
20
21 /* access */ /* ����� */
// ���¶���ķ��ų�������access()������
22 #define F_OK 0 // ����ļ��Ƿ���ڡ�
23 #define X_OK 1 // ����Ƿ��ִ�У���������
24 #define W_OK 2 // ����Ƿ��д��
25 #define R_OK 4 // ����Ƿ�ɶ���
26
27 /* lseek */ /* �ļ�ָ���ض�λ */
// ���·��ų�������lseek()��fcntl()������
28 #define SEEK_SET 0 // ���ļ���дָ������Ϊƫ��ֵ��
29 #define SEEK_CUR 1 // ���ļ���дָ������Ϊ��ǰֵ����ƫ��ֵ��
30 #define SEEK_END 2 // ���ļ���дָ������Ϊ�ļ����ȼ���ƫ��ֵ��
31
32 /* _SC stands for System Configuration. We don't use them much */
/* _SC��ʾϵͳ���á����Ǻ���ʹ�� */
// ����ķ��ų�������sysconf()������
33 #define _SC_ARG_MAX 1 // ����������
34 #define _SC_CHILD_MAX 2 // �ӽ����������
35 #define _SC_CLOCKS_PER_SEC 3 // ÿ��δ�����
36 #define _SC_NGROUPS_MAX 4 // ���������
37 #define _SC_OPEN_MAX 5 // ���������
38 #define _SC_JOB_CONTROL 6 // ��ҵ���ơ�
39 #define _SC_SAVED_IDS 7 // ����ı�ʶ����
40 #define _SC_VERSION 8 // �汾��
41
42 /* more (possibly) configurable things - now pathnames */
/* ����ģ����ܵģ������ò��� - ��������·���� */
// ����ķ��ų�������pathconf()������
43 #define _PC_LINK_MAX 1 // �����������
44 #define _PC_MAX_CANON 2 // ��������
45 #define _PC_MAX_INPUT 3 // ������볤�ȡ�
46 #define _PC_NAME_MAX 4 // ������ȡ�
47 #define _PC_PATH_MAX 5 // ·����ȡ�
48 #define _PC_PIPE_BUF 6 // �ܵ������С��
49 #define _PC_NO_TRUNC 7 // �ļ������ضϡ�
50 #define _PC_VDISABLE 8 //
51 #define _PC_CHOWN_RESTRICTED 9 // �ı��������ޡ�
52
53 #include <sys/stat.h> // �ļ�״̬ͷ�ļ��������ļ����ļ�ϵͳ״̬�ṹstat{}�ͳ�����
54 #include <sys/time.h>
55 #include <sys/times.h> // �����˽���������ʱ��ṹtms�Լ�times()����ԭ�͡�
56 #include <sys/utsname.h> // ϵͳ���ƽṹͷ�ļ���
57 #include <sys/resource.h>
58 #include <utime.h> // �û�ʱ��ͷ�ļ��������˷��ʺ���ʱ��ṹ�Լ�utime()ԭ�͡�
59
60 #ifdef __LIBRARY__
61
// ������ʵ�ֵ�ϵͳ���÷��ų���������ϵͳ���ú�����������ֵ(�μ�include/linux/sys.h) ��
62 #define __NR_setup 0 /* used only by init, to get system going */
63 #define __NR_exit 1 /* __NR_setup�����ڳ�ʼ����������ϵͳ */
64 #define __NR_fork 2
65 #define __NR_read 3
66 #define __NR_write 4
67 #define __NR_open 5
68 #define __NR_close 6
69 #define __NR_waitpid 7
70 #define __NR_creat 8
71 #define __NR_link 9
72 #define __NR_unlink 10
73 #define __NR_execve 11
74 #define __NR_chdir 12
75 #define __NR_time 13
76 #define __NR_mknod 14
77 #define __NR_chmod 15
78 #define __NR_chown 16
79 #define __NR_break 17
80 #define __NR_stat 18
81 #define __NR_lseek 19
82 #define __NR_getpid 20
83 #define __NR_mount 21
84 #define __NR_umount 22
85 #define __NR_setuid 23
86 #define __NR_getuid 24
87 #define __NR_stime 25
88 #define __NR_ptrace 26
89 #define __NR_alarm 27
90 #define __NR_fstat 28
91 #define __NR_pause 29
92 #define __NR_utime 30
93 #define __NR_stty 31
94 #define __NR_gtty 32
95 #define __NR_access 33
96 #define __NR_nice 34
97 #define __NR_ftime 35
98 #define __NR_sync 36
99 #define __NR_kill 37
100 #define __NR_rename 38
101 #define __NR_mkdir 39
102 #define __NR_rmdir 40
103 #define __NR_dup 41
104 #define __NR_pipe 42
105 #define __NR_times 43
106 #define __NR_prof 44
107 #define __NR_brk 45
108 #define __NR_setgid 46
109 #define __NR_getgid 47
110 #define __NR_signal 48
111 #define __NR_geteuid 49
112 #define __NR_getegid 50
113 #define __NR_acct 51
114 #define __NR_phys 52
115 #define __NR_lock 53
116 #define __NR_ioctl 54
117 #define __NR_fcntl 55
118 #define __NR_mpx 56
119 #define __NR_setpgid 57
120 #define __NR_ulimit 58
121 #define __NR_uname 59
122 #define __NR_umask 60
123 #define __NR_chroot 61
124 #define __NR_ustat 62
125 #define __NR_dup2 63
126 #define __NR_getppid 64
127 #define __NR_getpgrp 65
128 #define __NR_setsid 66
129 #define __NR_sigaction 67
130 #define __NR_sgetmask 68
131 #define __NR_ssetmask 69
132 #define __NR_setreuid 70
133 #define __NR_setregid 71
134 #define __NR_sigsuspend 72
135 #define __NR_sigpending 73
136 #define __NR_sethostname 74
137 #define __NR_setrlimit 75
138 #define __NR_getrlimit 76
139 #define __NR_getrusage 77
140 #define __NR_gettimeofday 78
141 #define __NR_settimeofday 79
142 #define __NR_getgroups 80
143 #define __NR_setgroups 81
144 #define __NR_select 82
145 #define __NR_symlink 83
146 #define __NR_lstat 84
147 #define __NR_readlink 85
148 #define __NR_uselib 86
149
// ���¶���ϵͳ����Ƕ��ʽ���꺯����
// ����������ϵͳ���ú꺯����type name(void)��
// %0 - eax(__res)��%1 - eax(__NR_##name)������name��ϵͳ���õ����ƣ��� __NR_ ����γ�����
// ��ϵͳ���÷��ų������Ӷ�������ϵͳ���ñ��к���ָ��Ѱַ��
// ���أ��������ֵ���ڵ���0���ظ�ֵ�������ó�����errno��������-1��
// �ں궨���У�����������Ƿ���֮�������������ľ���'##'�����ʾ�ں��滻ʱ������������
// ����������һ�����������139���ϵ�__NR_##name�����滻�˲���name��������fork��֮��
// ����ڳ����г��ֵĽ����Ƿ���__NR_fork���μ���The C Programming Language����¼A.12.3��
150 #define _syscall0(type,name) \
151 type name(void) \
152 { \
153 long __res; \
154 __asm__ volatile ("int $0x80" \ // ����ϵͳ�ж�0x80��
155 : "=a" (__res) \ // ����ֵ��eax(__res)��
156 : "0" (__NR_##name)); \ // ����Ϊϵͳ�жϵ��ú�__NR_name��
157 if (__res >= 0) \ // �������ֵ>=0����ֱ�ӷ��ظ�ֵ��
158 return (type) __res; \
159 errno = -__res; \ // �����ó����ţ�������-1��
160 return -1; \
161 }
162
// ��1��������ϵͳ���ú꺯����type name(atype a)
// %0 - eax(__res)��%1 - eax(__NR_name)��%2 - ebx(a)��
163 #define _syscall1(type,name,atype,a) \
164 type name(atype a) \
165 { \
166 long __res; \
167 __asm__ volatile ("int $0x80" \
168 : "=a" (__res) \
169 : "0" (__NR_##name),"b" ((long)(a))); \
170 if (__res >= 0) \
171 return (type) __res; \
172 errno = -__res; \
173 return -1; \
174 }
175
// ��2��������ϵͳ���ú꺯����type name(atype a, btype b)
// %0 - eax(__res)��%1 - eax(__NR_name)��%2 - ebx(a)��%3 - ecx(b)��
176 #define _syscall2(type,name,atype,a,btype,b) \
177 type name(atype a,btype b) \
178 { \
179 long __res; \
180 __asm__ volatile ("int $0x80" \
181 : "=a" (__res) \
182 : "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b))); \
183 if (__res >= 0) \
184 return (type) __res; \
185 errno = -__res; \
186 return -1; \
187 }
188
// ��3��������ϵͳ���ú꺯����type name(atype a, btype b, ctype c)
// %0 - eax(__res)��%1 - eax(__NR_name)��%2 - ebx(a)��%3 - ecx(b)��%4 - edx(c)��
189 #define _syscall3(type,name,atype,a,btype,b,ctype,c) \
190 type name(atype a,btype b,ctype c) \
191 { \
192 long __res; \
193 __asm__ volatile ("int $0x80" \
194 : "=a" (__res) \
195 : "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b)),"d" ((long)(c))); \
196 if (__res>=0) \
197 return (type) __res; \
198 errno=-__res; \
199 return -1; \
200 }
201
202 #endif /* __LIBRARY__ */
203
204 extern int errno; // �����ţ�ȫ�ֱ�����
205
// ��Ӧ��ϵͳ���õĺ���ԭ�Ͷ��塣(��ϸ˵���μ�include/linux/sys.h )
206 int access(const char * filename, mode_t mode);
207 int acct(const char * filename);
208 int alarm(int sec);
209 int brk(void * end_data_segment);
210 void * sbrk(ptrdiff_t increment);
211 int chdir(const char * filename);
212 int chmod(const char * filename, mode_t mode);
213 int chown(const char * filename, uid_t owner, gid_t group);
214 int chroot(const char * filename);
215 int close(int fildes);
216 int creat(const char * filename, mode_t mode);
217 int dup(int fildes);
218 int execve(const char * filename, char ** argv, char ** envp);
219 int execv(const char * pathname, char ** argv);
220 int execvp(const char * file, char ** argv);
221 int execl(const char * pathname, char * arg0, ...);
222 int execlp(const char * file, char * arg0, ...);
223 int execle(const char * pathname, char * arg0, ...);
// ������ǰ�Ĺؼ���volatile���ڸ��߱�����gcc�ú������᷵�ء���������gcc��������һ
// Щ�Ĵ��룬����Ҫ����ʹ������ؼ��ֿ��Ա������ijЩ��δ��ʼ�������ģ��پ�����Ϣ��
// ��ͬ��gcc�ĺ�������˵����void do_exit(int error_code) __attribute__ ((noreturn));
224 volatile void exit(int status);
225 volatile void _exit(int status);
226 int fcntl(int fildes, int cmd, ...);
227 int fork(void);
228 int getpid(void);
229 int getuid(void);
230 int geteuid(void);
231 int getgid(void);
232 int getegid(void);
233 int ioctl(int fildes, int cmd, ...);
234 int kill(pid_t pid, int signal);
235 int link(const char * filename1, const char * filename2);
236 int lseek(int fildes, off_t offset, int origin);
237 int mknod(const char * filename, mode_t mode, dev_t dev);
238 int mount(const char * specialfile, const char * dir, int rwflag);
239 int nice(int val);
240 int open(const char * filename, int flag, ...);
241 int pause(void);
242 int pipe(int * fildes);
243 int read(int fildes, char * buf, off_t count);
244 int setpgrp(void);
245 int setpgid(pid_t pid,pid_t pgid);
246 int setuid(uid_t uid);
247 int setgid(gid_t gid);
248 void (*signal(int sig, void (*fn)(int)))(int);
249 int stat(const char * filename, struct stat * stat_buf);
250 int fstat(int fildes, struct stat * stat_buf);
251 int stime(time_t * tptr);
252 int sync(void);
253 time_t time(time_t * tloc);
254 time_t times(struct tms * tbuf);
255 int ulimit(int cmd, long limit);
256 mode_t umask(mode_t mask);
257 int umount(const char * specialfile);
258 int uname(struct utsname * name);
259 int unlink(const char * filename);
260 int ustat(dev_t dev, struct ustat * ubuf);
261 int utime(const char * filename, struct utimbuf * times);
262 pid_t waitpid(pid_t pid,int * wait_stat,int options);
263 pid_t wait(int * wait_stat);
264 int write(int fildes, const char * buf, off_t count);
265 int dup2(int oldfd, int newfd);
266 int getppid(void);
267 pid_t getpgrp(void);
268 pid_t setsid(void);
269 int sethostname(char *name, int len);
270 int setrlimit(int resource, struct rlimit *rlp);
271 int getrlimit(int resource, struct rlimit *rlp);
272 int getrusage(int who, struct rusage *rusage);
273 int gettimeofday(struct timeval *tv, struct timezone *tz);
274 int settimeofday(struct timeval *tv, struct timezone *tz);
275 int getgroups(int gidsetlen, gid_t *gidset);
276 int setgroups(int gidsetlen, gid_t *gidset);
277 int select(int width, fd_set * readfds, fd_set * writefds,
278 fd_set * exceptfds, struct timeval * timeout);
279
280 #endif
281