linux_homework3——文件操作(续)和进程管理

学习目标:

  • 了解文件操作的相关函数及其用法
  • 初步学习进程管理

学习内容:

文件操作

1.函数:
stat()
access()
chmod()
truncate()
link()

stat():

1 #include <sys/stat.h>
2 int stat(const char *path, struct stat *buf);

功能:用于获取文件的属性;
参数说明:

path:文件路径;
buf:接收获取到的文件属性;文件属性存储在inode中,函数从inode结构体中获取文件信息。

返回值说明:

成功:0
不成功:-1并设置errno

文件stat结构体中st_size成员
  对于所有的文件类型,st_size成员对其中的普通文件、目录以及符号链接有实在的意义。其中,对于普通文件而言,st_size记录了该文件的实际大小;对于目录而言,st_size的值为16或者512的倍数;对于符号链接而言,st_size的值为符号链接所指的路径的长度。例如lib->usr/lib,则st_size的值即为7。在某些Unix系统中,st_size的值对pipe等文件也有意义,表示当前pipe中可以读取的字节数。

下面参照老师的案例来实现一下

在这里插入图片描述在这里插入图片描述这是1.txt文件里面的内容,下面我们运行一下
在这里插入图片描述可以看到上面显示的长度是18,那么我们只有16个字符,为什么上面会显示18呢?首先从代码的角度来说,st_size表示文件的大小而并非长度,只是和长度有关,所以用len的话不如用size。其次,通过多次测试发现,一个空文件的大小是1,换行符在文件中的大小是1,那么我们就不难理解为什么16和字符的长度会显示18了。

access():

#include <unistd.h>`
int access(const char *pathname, int mode);
具体内容就不多说了,写了个实例,让我们来尝试一下

在这里插入图片描述在这里插入图片描述这里我们先设置1.txt的权限为777(rwx,具体可自行百度),
在这里插入图片描述可以看到1.txt是有可读权限的,然后我们再设置一下
在这里插入图片描述改成771之后再运行一下
在这里插入图片描述可以看到我们没有权限访问了,在经过多次测试之后发现access函数对于测试权限的对象为others,并不是用户及用户组的权限。

chmod():

1 #include <sys/stat.h>
2 int chmod(const char *path, mode_t mode);

功能:用于修改文件的访问权限;就是在上面用命令行变成了用c语言执行==,这里不多解释了

truncate():

1 #include <sys/stat.h>
2 int truncate(const char *path, off_t length);

功能:用于修改文件大小,常用于扩展文件,其功能与lseek函数类似;
参数说明:

path:路径名;
length:设置文件大小。

返回值说明:

成功:0;
不成功:-1并设置errno。

进程管理

1 进程控制

fork()
exec函数族
wait()
exit()
1.1 创建进程

1 #include <unistd.h>
2 pid_t fork(void);

功能:创建进程;函数执行后,系统会创建一个与原进程几乎相同的进程,之后父子进程都继续执行,
参数说明:无

返回值说明:

成功:返回两个值,子进程创建成功后,原程序会被复制,就有了两个fork函数。父进程的fork函数会返回子进程的pid,子进程的fork函数会返回0.
不成功:若子进程创建失败,原程序不会复制,父进程的fork函数返回-1。

下面来运行一下案例1
在这里插入图片描述【思考 1】多次执行test_fork会发现,child process后输出的ppid不等于parent process的pid,而等于1。请说明原因。
【提示】出现这种情况,是因为父进程先于子进程终止,子进程变成“孤儿进程”,后面由init进程来接收。

案例2
如果只希望父进程可以创建新进程,则在for循环中添加一个判断:若当前进程不是父进程,则跳出循环。
在这里插入图片描述提示:
在Linux系统中,子进程应由父进程回收,但是当子进程被创建后,它与它的父进程及其它进程共同竞争系统资源,所以父子进程执行的顺序是不确定的,终止的先后顺序也是不确定的。
Shell命令提示符也是1个进程,它需要和新建进程一起竞争CPU。
案例3
利用sleep函数,暂缓进程执行
在这里插入图片描述那么本次的作业就到这里了,如有不足请多多指点😁

参考链接:
https://blog.csdn.net/search_129_hr/article/details/124476473
https://blog.csdn.net/dahailantian1/article/details/78584751

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值