ERRNO是什么? 。为防止和正常的返回值混淆,系统调用并不直接返 回错误码,而是将错误码放入一个名为erno的全局 变量中。如果一个系统调用失败,你可以读出errno 的值来确定问题所在。 errno不同数值所代表的错误消息定义在erno.h中 你也可以通过命令"man3 errno"来察看它们。 需要注意的是,errno的值只在函数发生错误时设置 如果函数不发生错误,errno的值就无定义,并不 会被置为0。另外,在处理errnoj前最好先把它的值 存入另一个变量,因为在错误处理过程中,即使像 printf0这样的函数出错时也会改变errno的值。 6
ERRNO是什么? 为防止和正常的返回值混淆,系统调用并不直接返 回错误码,而是将错误码放入一个名为errno的全局 变量中。如果一个系统调用失败,你可以读出errno 的值来确定问题所在。 errno不同数值所代表的错误消息定义在errno.h中 ,你也可以通过命令"man 3 errno"来察看它们。 需要注意的是,errno的值只在函数发生错误时设置 ,如果函数不发生错误,errno的值就无定义,并不 会被置为0。另外,在处理errno前最好先把它的值 存入另一个变量,因为在错误处理过程中,即使像 printf()这样的函数出错时也会改变errno的值。 6
GETPID getpid的作用很简单,就是返回当前进程的进程ID。 0 /getpid_test.c * #include<unistd.h> mainO printf("The current process ID is %d\n",getpidO);
GETPID getpid的作用很简单,就是返回当前进程的进程ID。 /* getpid_test.c */ #include<unistd.h> main() { printf("The current process ID is %d\n",getpid()); }
0 编译并运行程序getpid_test.c: o Sgcc getpid test.c -o getpid _test o $./getpid test The current process ID is 1980 。(你自己的运行结果很可能与这个数字不一样,这是 很正常的。) 。再运行一遍: o $./getpid test The current process ID is 1981 。正如我们所见,尽管是同一个应用程序,每一次运行 的时候,所分配的进程标识符都不相同
编译并运行程序getpid_test.c: $gcc getpid_test.c -o getpid_test $./getpid_test The current process ID is 1980 (你自己的运行结果很可能与这个数字不一样,这是 很正常的。) 再运行一遍: $./getpid_test The current process ID is 1981 正如我们所见,尽管是同一个应用程序,每一次运行 的时候,所分配的进程标识符都不相同
FORK o#include<sys/types.h>/*提供类型pidt的定义*/ include<unistd.h>/提供函数的定义*/ pid_t fork(void); 。ork系统调用的作用是复制一个进程。当一个进程调 用它,完成后就出现两个几乎一模一样的进程,我们 也由此得到了一个新进程。据说fork的名字就是来源 于这个与叉子的形状颇有几分相似的工作流程。 。在Linux中,创造新进程的方法只有一个,就是我们 正在介绍的fork。其他一些库函数,如system0,看 起来似乎它们也能创建新的进程,如果能看一下它们 的源码就会明白,它们实际上也在内部调用了ok。 包括我们在命令行下运行应用程序,新的进程也是由 shell调用fork制造出来的
FORK #include<sys/types.h> /* 提供类型pid_t的定义 */ #include<unistd.h> /* 提供函数的定义 */ pid_t fork(void); fork系统调用的作用是复制一个进程。当一个进程调 用它,完成后就出现两个几乎一模一样的进程,我们 也由此得到了一个新进程。据说fork的名字就是来源 于这个与叉子的形状颇有几分相似的工作流程。 在Linux中,创造新进程的方法只有一个,就是我们 正在介绍的fork。其他一些库函数,如system(),看 起来似乎它们也能创建新的进程,如果能看一下它们 的源码就会明白,它们实际上也在内部调用了fork。 包括我们在命令行下运行应用程序,新的进程也是由 shell调用fork制造出来的