SimpleOS

LXR

Navigation



Site hébergé par : enix

The LXR Cross Referencer for SOS

source navigation ]
diff markup ]
identifier search ]
general search ]
 
 
Article:1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 6.5 ] [ 7 ] [ 7.5 ] [ 8 ] [ 9 ] [ 9.5 ]

001 /* Copyright (C) 2005 David Decotigny
002    Copyright (C) 2003 Thomas Petazzoni
003 
004    This program is free software; you can redistribute it and/or
005    modify it under the terms of the GNU General Public License
006    as published by the Free Software Foundation; either version 2
007    of the License, or (at your option) any later version.
008    
009    This program is distributed in the hope that it will be useful,
010    but WITHOUT ANY WARRANTY; without even the implied warranty of
011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012    GNU General Public License for more details.
013    
014    You should have received a copy of the GNU General Public License
015    along with this program; if not, write to the Free Software
016    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
017    USA. 
018 */
019 #ifndef _SOS_USER_LIBC_H_
020 #define _SOS_USER_LIBC_H_
021 
022 #include <types.h>
023 
024 /**
025  * @file libc.h
026  *
027  * The basic user C library for user programs
028  */
029 
030 /**
031  * The most important function of a C program ! ;)
032  */
033 void exit (int status);
034 
035 
036 /**
037  * Function to duplicate the current running process
038  */
039 pid_t fork(void);
040 
041 
042 /**
043  * Function to re-initialize the address space of the current process
044  * with that of the program 'progname'
045  */
046 int exec(const char *progname);
047 
048 
049 int nanosleep(unsigned long int sec,
050               unsigned long int nanosec);
051 
052 
053 int sleep(unsigned int seconds);
054 
055 
056 /**
057  * These flags (for mmap API) MUST be consistent with those defined in
058  * paging.h and umem_vmm.h
059  */
060 #define PROT_NONE  0
061 #define PROT_READ  (1<<0)
062 #define PROT_WRITE (1<<1)
063 #define PROT_EXEC  (1<<2) /* Not supported on IA32 */
064 
065 #define MAP_SHARED (1 << 0)
066 #define MAP_FIXED  (1 << 31)
067 
068 
069 /**
070  * Unmap the given user address interval
071  */
072 int munmap(void * start, size_t length);
073 
074 
075 /**
076  * Change the access permissions of the given user address interval
077  */
078 int mprotect(const void *addr, size_t len, int prot);
079 
080 
081 /**
082  * This flag tells mremap that the underlying VR may be moved, when necessary
083  */
084 #define MREMAP_MAYMOVE (1 << 30)
085 
086 /**
087  * Grow/shrink the end of the given mapping
088  */
089 void * mremap(void * old_addr, size_t old_len,
090               size_t new_len,
091               unsigned long flags);
092 
093 
094 /**
095  * Standard heap management API
096  */
097 
098 /** @note MT UNSAFE */
099 int brk(void *end_data_seg);
100 
101 /** @note MT UNSAFE */
102 void *sbrk(ptrdiff_t increment);
103 
104 /** @note MT UNSAFE */
105 void * calloc (size_t nmemb, size_t size);
106 
107 /** @note MT UNSAFE */
108 void * malloc (size_t size);
109 
110 /** @note Does nothing (not implemented yet) */
111 void free(void *ptr);
112 
113 
114 /*
115  * Filesystem subsystem
116  */
117 
118 int mount(const char *source, const char *target,
119           const char *filesystemtype, unsigned long mountflags,
120           const char *data);
121 
122 
123 int umount(const char *target);
124 
125 
126 void sync(void);
127 
128 
129 struct statvfs
130 {
131   unsigned int  f_rdev_major;
132   unsigned int  f_rdev_minor;
133   size_t        f_sz_total;  /**< Total size */
134   size_t        f_sz_free;   /**< Size left on device */
135   unsigned int  f_node_total;/**< Total allocatable FS nodes */
136   unsigned int  f_node_avail;/**< Number of available free FS nodes */
137   unsigned int  f_flags;
138 };
139 
140 int statvfs(const char *path, struct statvfs *buf);
141 
142 
143 #define O_EXCL      (1 << 0)
144 #define O_CREAT     (1 << 1)
145 #define O_TRUNC     (1 << 2)
146 #define O_NOFOLLOW  (1 << 3)
147 #define O_DIRECTORY (1 << 4) /* Incompatible with CREAT/TRUNC */
148 #define O_SYNC      (1 << 5)
149 
150 #define O_RDONLY    (1 << 16)
151 #define O_WRONLY    (1 << 17)
152 #define O_RDWR      (O_RDONLY | O_WRONLY)
153 
154 /**
155  * FS access rights. Same as in kernel fs.h
156  */
157 #define S_IRUSR     00400
158 #define S_IWUSR     00200
159 #define S_IXUSR     00100
160 #define S_IRWXALL   07777 /* For symlinks */
161 
162 int open(const char *pathname, int flags, /* mode_t mode */...);
163 
164 int close(int fd);
165 
166 
167 int read(int fd, char * buf, size_t len);
168 int write(int fd, const char * buf, size_t len);
169 
170 /* Same as sos_seek_whence_t in kernel fs.h */
171 #define SEEK_SET 42
172 #define SEEK_CUR 24
173 #define SEEK_END 84
174 off_t lseek(int fd, off_t offset, int whence);
175 loff_t lseek64(int fd, loff_t offset, int whence);
176 void * mmap(void *start, size_t length, int prot , int flags,
177             int fd, loff_t offset);
178 int ftruncate(int fd, off_t length);
179 int ftruncate64(int fd, loff_t length);
180 int fcntl(int fd, int cmd, int arg);
181 int ioctl(int fd, int cmd, int arg);
182 
183 int creat(const char *pathname, mode_t mode);
184 int link (const char *oldpath, const char *newpath);
185 int unlink(const char *pathname);
186 int rename(const char *oldpath, const char *newpath);
187 int symlink(const char *target, const char *path);
188 
189 /* Same as sos_fs_node_type_t in kernel fs.h */
190 #define S_IFREG 0x42
191 #define S_IFDIR 0x24
192 #define S_IFLNK 0x84
193 #define S_IFCHR 0x48
194 int mknod(const char *pathname, mode_t mode,
195           int type,
196           unsigned int major, unsigned minor);
197 
198 
199 int mkdir(const char *pathname, mode_t mode);
200 
201 
202 int rmdir(const char *pathname);
203 
204 
205 int chmod(const char *path, mode_t mode);
206 
207 
208 struct dirent
209 {
210   unsigned long long int storage_location;
211   unsigned long long int offset_in_dirfile;
212   unsigned int type;
213   unsigned short namelen;
214 
215 #define SOS_FS_DIRENT_NAME_MAXLEN 128
216   char       name[SOS_FS_DIRENT_NAME_MAXLEN];
217 };
218 
219 /* Forward declaration (defined in libc.c) */
220 struct sos_DIR_struct;
221 #define DIR struct sos_DIR_struct
222 
223 DIR *opendir(const char *name);
224 int dirfd(const DIR * dir);
225 struct dirent *readdir(DIR *dir);
226 int closedir(DIR *dir);
227 
228 struct stat
229 {
230   unsigned int           st_rdev_major;
231   unsigned int           st_rdev_minor;
232   int                    st_type;
233   unsigned long long int st_storage_location;
234   int                    st_access_rights;
235   unsigned int           st_nlink;
236   signed long long int   st_size;
237 };
238 
239 int stat(const char *file_name, struct stat *buf);
240 int lstat(const char *file_name, struct stat *buf);
241 int chroot(const char *path);
242 int chdir(const char *path);
243 int fchdir(int fd);
244 
245 int printf(const char *, ...);
246 
247 #endif /* _SOS_USER_LIBC_H_ */

source navigation ] diff markup ] identifier search ] general search ]