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 + -
显示快捷键?