Void-7's

OS实验:写一个Shell玩具需要的一些Linux C函数

linux

char getcwd(char buf, size_t size);

头文件: unistd.h

返回值: 执行成功则将结果复制到参数buf 所指的内存空间, 或是返回自动配置的字符串指针. 失败返回NULL,错误代码存于errno

注: 1、在调用此函数时,buf 所指的内存空间要足够大。若工作目录绝对路径的字符串长度超过参数size 大小,则返回NULL,errno 的值则为ERANGE。 2、倘若参数buf 为NULL,getcwd()会依参数size 的大小自动配置内存(使用malloc()),如果参数size 也为0,则getcwd()会依工作目录绝对路径的字符串程度来决定所配置的内存大小,进程可以在使用完次字符串后利用free()来释放此空间。

错误码 / errno

Linux中系统调用的错误都存储于 errno中,errno由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误。

打印错误信息 / perror

void perror(const char *s)

头文件: stdio.h

参数 s: 字符串提示符

输出形式 const char *s: strerror(errno) //提示符:发生系统错误的原因

字符串显示错误信息 / strerror

将错误码以字符串的信息显示出来

头文件: string.h

参数 errnum: 即errno

返回值: 返回错误码字符串信息

struct passwd *getpwuid(uid_t uid);

用用户uid获取其passwd结构体的指针。

头文件: pwd.h

返回值: a pointer to a struct passwd with the structure as defined in <pwd.h> with a matching entry if found. A null pointer shall be returned if the requested entry is not found, or an error occurs. On error, errno shall be set to indicate the error.

描述: The getpwuid() function need not be reentrant. A function that is not required to be reentrant is not required to be thread-safe. 无需重入(不可重入即不可递归),故无需线程安全。

int chdir(const char *path);

改变当前工作目录。参数path可以是绝对路径相对路径

头文件:unistd.h

返回值:On success, zero is returned. On error, -1 is returned, and errno is set to indicate the error.


Linux下read和fgets的一些比较

ssize_t read(int fd,void *buf,size_t nbyte)

read函数是负责从fd中读取最多nbytes个字节到buf,在读取数据时会将最后的回车(n)同时读入到buf中,但是 不会在后面加上字符串结束符(0)。成功时,read返回实际所读的字节数,如果返回的值是0,表示已经读到文件的结束了.若返回负值(通常为-1)表示发生了错误。

char fgets ( char str, int num, FILE * stream )

fgets负责从stream(通常是文件或者标准输入stdin)中读取num个字符到str中,在读取数据时会将最后的回车(n)同时读入到buf中,并且会在后面加上字符串结束符(0)。成功返回非空指针,失败返回空指针

因为stdin 的fd=0 stdout fd1 错误fd2,所以可以用read(0,buf,nbyte)来从标准输入获取用户输入。