怎么打开PP文件?
pp是3D游戏文件,一般用UltraEdit 打开。 UltraEdit 是一套功能强大的文本编辑器,可以编辑文本、十六进制、ASCII 码,完全可以取代记事本(如果电脑配置足够强大),内建英文单字检查、C++ 及 VB 指令突显,可同时编辑多个文件,而且即使开启很大的文件速度也不会慢。 UltraEdit 是 Windows 旗下一款流行的老牌文本/HEX 编辑器(非开源)。UltraEdit 正被移植到 Linux 平台。该移植名为 UEX,意即 UltraEdit forLinux。UEX具有原生的 Linux 外观,其界面、配置、热键等与 Windows 版并无二致。
pp文件,用什么东西可以打开?
pp是3D游戏文件,一般用UltraEdit打开。 UltraEdit是一套功能强大的文本编辑器,可以编辑文本、十六进制、ASCII码,完全可以取代记事本(如果电脑配置足够强大),内建英文单字检查、C++及VB指令突显,可同时编辑多个文件,而且即使开启很大的文件速度也不会慢。 UltraEdit是Windows旗下一款流行的老牌文本/HEX编辑器(非开源)。UltraEdit正被移植到Linux平台。该移植名为UEX,意即UltraEditforLinux。UEX具有原生的Linux外观,其界面、配置、热键等与Windows版并无二致。 UltraEdit是一个49.95美元的共享软件,提供了友好界面的编程编辑器,支持语法高亮,代码折叠和宏,以及一大堆其他的功能,内置了对于HTML、PHP和JavaScript等语法的支持。 UltraEdit代码折叠支持在所有32位Windows平台上进行64位文件处理(标准),Unicode支持基于磁盘的文本编辑和大文件处理-支持超过4GB的文件,即使是数兆字节的文件也只占用极少的内存。
Linux的写时拷贝所指的“写入”,具体是指什么?
linux的进程
Linux 内核在系统启动的最后阶段会启动 init 进程。Linux 系统的进程之间存在着明显的继承关系,所有的进程都是 pid 为 1 的 init 进程的后代。
其他一些操作系统在创建进程时,首先在地址空间里创建进程,读入可执行文件,最后开始执行。Linux 是类 Unix 的操作系统,关于进程创建,它不同于前面那些操作系统,而是定义了 fork() 和 exec() 两组函数。这里以 fork() 函数为例介绍题主所说的“写时拷贝”。
linux创建进程的资源
fork() 函数通过拷贝父进程创建子进程,子进程与父进程的区别仅仅在于 pid,ppid 和一些资源的统计量,比如挂起的信号等。在早期,fork() 函数会将父进程的所有其他资源都复制给子进程。这种设计过于简单粗暴,因为子进程也许并不需要父进程的资源,如果子进程被创建后,转而执行和之前毫不相关的工作,那之前拷贝资源的开销就浪费了,一点意义也没有。
为了解决上面提到的可能会出现浪费的问题,“写时拷贝”的概念就被提出了。写时拷贝是一种可以推迟甚至免去拷贝数据的技术。子进程被创建后,系统将父进程的资源以只读的方式共享给子进程,这样子进程能够使用原本应该拷贝给子进程的数据,而同时又不会“污染”父进程。
这样一来,如果子进程只需要读取父进程数据,或者不需要使用父进程的数据,那么拷贝就免去了。如果子进程需要写这部分数据,则为了保证进程之间的数据独立性,系统才会将父进程的资源拷贝给子进程。
实例
结合上面这两点,就是“写时拷贝”的含义了,下面给出 demo:
char *buf = (char*)malloc(100*1024*1024);
int pid = fork();
if(pid==0){
printf("child exit\n");
free(buf);
exit(0);
}else{
wait(&status);
free(buf);
exit(0);
}
对于上面这种情况,因为子进程没有用到父进程的 buf,所以系统就免去了拷贝 buf 100MB 的开销,提升了效率。
char *buf = (char*)malloc(100*1024*1024);
int pid = fork();
if(pid==0){
buf[0] = 1;
printf("child exit\n");
free(buf);
exit(0);
}else{
wait(&status);
free(buf);
exit(0);
}
而对于上面这种情况,因为子进程需要写 buf,系统就不可避免的要把父进程的资源拷贝给子进程了。
这就是“写时拷贝”了。
Linux系统是如何创建进程的?听说这一过程是用C语言clone函数实现的?
这跟execvp函数的实现方式有关:
int execvp(const char *file ,char * const argv []);
execvp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。
之所以显示“fail to exec”,是因为在PATH环境变量所指的目录中没有名为“hello”的程序。建议进行如下操作:
1、运行“echo $PATH”,查看一下PATH环境变量指向那些目录
2、编写一个输出“hello world”的程序,并命名为hello,即执行命令:
gcc -o hello
hello.c
3、把名为”hello“的程序拷贝到PATH变量所指的其中一个目录中

