unistd.c
来自「俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)」· C语言 代码 · 共 245 行
C
245 行
#include <unistd.h>#include <stdio.h>#include <string.h>#include <sys/stat.h>#include <errno.h>#include <setjmp.h>#include <sys/wcetypes.h>#include <sys/wcefile.h>#include <sys/wceerror.h>#include <sys/wcetrace.h>int __umask;int __IsForkChild=0;static jmp_buf __ForkJmpBuf;static int __SpawnedPid=-1;intaccess(const char *fname, int mode){ struct stat st; if (fname == NULL) return(-1); if (stat(fname, &st) < 0) return(-1); /* Check for writability */ if (mode & W_OK) { if (!(st.st_mode & S_IWRITE)) { errno = EACCES; return(-1); } } return(0);}mode_tumask(mode_t mask){ int oldumask = __umask; __umask = mask; return(oldumask);}intmkdir(const char *dirname, mode_t mode){ wchar_t dirnamew[MAX_PATH]; char pathbuf[MAX_PATH]; BOOL res; fixpath(dirname, pathbuf); mbstowcs(dirnamew, pathbuf, MAX_PATH); res = CreateDirectoryW(dirnamew, NULL); if (res != TRUE) { errno =_winerr2errno(GetLastError()); return(-1); } return(0);}intrmdir(const char *dirname){ wchar_t dirnamew[MAX_PATH]; char pathbuf[MAX_PATH]; BOOL res; if (dirname == NULL) return(-1); fixpath(dirname, pathbuf); mbstowcs(dirnamew, pathbuf, MAX_PATH); WCETRACE(WCE_IO, "rmdir: path is \"%s\"", pathbuf); res = RemoveDirectoryW(dirnamew); WCETRACE(WCE_IO, "RemoveDirectory returns %d, oserr %d", res, GetLastError()); if (res != TRUE) { errno =_winerr2errno(GetLastError()); return(-1); } return(0);}int_rename(const char *old, const char *new){ struct stat st; wchar_t oldw[MAX_PATH], neww[MAX_PATH]; BOOL res; if (old == NULL || new == NULL) return(-1); if (stat(new, &st) == 0) { if (remove(new) < 0) { return(-1); } } mbstowcs(neww, new, MAX_PATH); mbstowcs(oldw, old, MAX_PATH); res = MoveFileW(oldw, neww); if (res != TRUE) { errno =_winerr2errno(GetLastError()); return(-1); } return(0);}int_remove(const char *path){ wchar_t pathw[MAX_PATH]; char pathbuf[MAX_PATH]; BOOL res; if (path == NULL) return(-1); fixpath(path, pathbuf); mbstowcs(pathw, pathbuf, MAX_PATH); res = DeleteFileW(pathw); if (res != TRUE) { errno = _winerr2errno(GetLastError()); return(-1); } return(0);}int_unlink_r(struct _reent *reent, const char *path){ wchar_t pathw[MAX_PATH]; char pathbuf[MAX_PATH]; BOOL res; if (path == NULL) return(-1); fixpath(path, pathbuf); mbstowcs(pathw, pathbuf, MAX_PATH); res = DeleteFileW(pathw); if (res == FALSE) { errno = _winerr2errno(GetLastError()); return(-1); } return(0);}voidusleep(unsigned long usec){ Sleep(usec/1000);}int chown(const char *path, uid_t owner, gid_t group){ return(0);}intfchown(int fd, uid_t owner, gid_t group){ return(0);}intmknod(const char *pathname, mode_t mode, dev_t dev){ errno = ENOTSUP; return(-1);}int symlink(const char *oldpath, const char *newpath){ errno = ENOTSUP; return(-1);}intreadlink(const char *path, char *buf, size_t bufsiz){ errno = ENOTSUP; return(-1);}unsignedalarm(unsigned secs){ errno = ENOTSUP; return(-1);}unsigned intsleep(unsigned int secs){ Sleep(1000 * secs); return(0);}pid_t_fork_r(){ puts("Forking..."); if(__IsForkChild) // do not allow child to fork itself { errno = ENOTSUP; return(-1); } if(setjmp(__ForkJmpBuf)) { puts("Returned to parent..."); return __SpawnedPid; } else { puts("Inside child..."); __IsForkChild=1; } return 0;}void _done_exec(pid_t pid){ __SpawnedPid=pid; __IsForkChild=0; longjmp(__ForkJmpBuf,1);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?