📄 p6-21.c
字号:
#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <stdlib.h>static uid_t euid, ruid; /* 保存有效和实际UIDS*//* 恢复有效UID 到原来的值 */#define SCORES_FILE "/tmp/score"void do_setuid(void){ int status;#ifdef _POSIX_SAVED_IDS status = setuid(euid);#else status = setreuid(ruid, euid);#endif if (status < 0) { fprintf(stderr, "Couldn't set uid.\n"); exit(status); }}/* 设置有效UID到实际UID */void undo_setuid(void){ int status;#ifdef _POSIX_SAVED_IDS status = setuid(ruid);#else status = setreuid(euid, ruid);#endif if (status < 0) { fprintf(stderr, "Couldn't set uid.\n"); exit(status); }}/* 记录得分 */int record_score (int score){ FILE *stream; char *myname; /* 打开得分文件*/ do_setuid(); stream = fopen(SCORES_FILE, "a"); undo_setuid(); /* 写得分至分数文件 */ if (stream) { myname = cuserid (NULL); if (score < 0) fprintf(stream, "%10s: Couldn't lift the caber.\n",myname); else fprintf (stream, "%10s: %d feet.\n", myname, score); fclose (stream); return 0; } else return -1;}int main (void){ /* 保存实际和有效用户IDs */ ruid = getuid (); euid = geteuid (); undo_setuid (); /* 进行游戏并记录得分 */ /* ... */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -