⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 helpers.c

📁 Linux系统快速启动 一个华硕eeepc快速启动的clone。 能装在大多数Linux系统上。 http://helllabs.org/finit/
💻 C
字号:
#include <string.h>#include <limits.h>#include <stdlib.h>#include <sys/stat.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <sys/ioctl.h>#include <sys/socket.h>#include <net/if.h>#include <netinet/in.h>#include <arpa/inet.h>#ifdef BUILTIN_RUNPARTS#include <dirent.h>#include <stdarg.h>#include <sys/wait.h>#endif#include <grp.h>#include "helpers.h"/* * Helpers to replace system() calls */int makepath(char *p){	char *x, path[PATH_MAX];	int ret;		x = path;	do {		do { *x++ = *p++; } while (*p && *p != '/');		*x = 0;		ret = mkdir(path, 0777);	} while (*p && (*p != '/' || *(p + 1))); /* ignore trailing slash */	return ret;}void ifconfig(char *name, char *inet, char *mask, int up){	struct ifreq ifr;	struct sockaddr_in *a = (struct sockaddr_in *)&ifr.ifr_addr;	int sock;	if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)) < 0)		return;	memset(&ifr, 0, sizeof (ifr));	strncpy(ifr.ifr_name, name, IFNAMSIZ);	a->sin_family = AF_INET;	if (up) {		inet_aton(inet, &a->sin_addr);		ioctl(sock, SIOCSIFADDR, &ifr);		inet_aton(mask, &a->sin_addr);		ioctl(sock, SIOCSIFNETMASK, &ifr);	}	ioctl(sock, SIOCGIFFLAGS, &ifr);	if (up)		ifr.ifr_flags |= IFF_UP;	else		ifr.ifr_flags &= ~IFF_UP;	ioctl(sock, SIOCSIFFLAGS, &ifr);		close(sock);}#define BUF_SIZE 4096void copyfile(char *src, char *dst, int size){	char buffer[BUF_SIZE];	int s, d, n;	/* Size == 0 means copy entire file */	if (size == 0)		size = INT_MAX;	if ((s = open(src, O_RDONLY)) >= 0) {		if ((d = open(dst, O_WRONLY | O_CREAT, 0644)) >= 0) {			do {				int csize = size > BUF_SIZE ?  BUF_SIZE : size;						if ((n = read(s, buffer, csize)) > 0)					write(d, buffer, n);				size -= csize;			} while (size > 0 && n == BUF_SIZE);			close(d);		}		close(s);	}}#ifdef BUILTIN_RUNPARTS#define NUM_SCRIPTS 128		/* ought to be enough for anyone */#define NUM_ARGS 16static int cmp(const void *s1, const void *s2){	return strcmp(*(char **)s1, *(char **)s2);}int run_parts(char *dir, ...){	DIR *d;	struct dirent *e;	struct stat st;	char *ent[NUM_SCRIPTS];	int i, num = 0, argnum = 1;	char *args[NUM_ARGS];	va_list ap;	if (chdir(dir))		return -1;	if ((d = opendir(dir)) == NULL)		return -1;	va_start(ap, dir);	while (argnum < NUM_ARGS && (args[argnum++] = va_arg(ap, char *)));	va_end(ap);	while ((e = readdir(d))) {		if (e->d_type == DT_REG && stat(e->d_name, &st) == 0) {			if (st.st_mode & S_IXUSR) {				ent[num++] = strdup(e->d_name);				if (num >= NUM_SCRIPTS)					break;			}		}	}	closedir(d);	if (num == 0)		return 0;	qsort(ent, num, sizeof(char *), cmp);	for (i = 0; i < num; i++) {		args[0] = ent[i];		if (!fork()) {			execv(ent[i], args);			exit(0);		}		wait(NULL);		free(ent[i]);	}	return 0;}int getgroup(char *s){	struct group *grp;	if ((grp = getgrnam(s)) == NULL)		return -1;	return grp->gr_gid;}/* * Other convenience functions */void chomp(char *s){	char *x;	if ((x = strchr((s), 0x0a)) != NULL)		*x = 0;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -