1.深度学习find和grep组合命令:(1)在/tmp目录下建立文件file.txt。并写入字符串“I love os”到文件中。使用find组合命令,查找/tmp目录下的所有普通文件。(2)查找/tmp目录下文件中有“os”字符串的文件名称。(提示采用find与grep组合使用)
2.编写一个程序,使用系统调用shmget(), shmat(), shmdt(), shmctl()实现进程通过共享内存的通信:一个子进程SERVER将共享内存首字节置为-1,当首字节值不为-1时读取这个值并再次将其置为-1;另一个子进程CLIENT在首字节为-1时将首字节置为9-0中的一个数字。(SHMKEY取值75,共享区的长度取1024)。
使用find组合命令查找普通文件:
find /tmp -type f
该命令会在/tmp目录下查找所有的普通文件。
使用find与grep组合命令查找含有“os”字符串的文件名称:
find /tmp -type f -exec grep -l "os" {} \;
该命令会在/tmp目录下查找所有含有“os”字符串的文件,并返回这些文件的名称。
进程间共享内存通信程序:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/shm.h>
#define SHM_KEY 75
#define SHM_SIZE 1024
int main() {
int shmid = shmget(SHM_KEY, SHM_SIZE, IPC_CREAT | 0666);
if (shmid < 0) {
perror("shmget");
exit(1);
}
char *shmaddr = shmat(shmid, NULL, 0);
if (shmaddr == (char *) -1) {
perror("shmat");
exit(1);
}
pid_t pid = fork();
if (pid < 0) {
perror("fork");
exit(1);
} else if (pid == 0) {
// 子进程SERVER
*shmaddr = -1; // 将共享内存首字节置为-1
printf("SERVER: set shared memory value to %d\n", *shmaddr);
while (*shmaddr == -1); // 等待首字节值不为-1
printf("SERVER: get shared memory value %d\n", *shmaddr);
*shmaddr = -1; // 再次将共享内存首字节置为-1
printf("SERVER: set shared memory value to %d\n", *shmaddr);
} else {
// 子进程CLIENT
while (*shmaddr == -1); // 等待首字节值不为-1
printf("CLIENT: get shared memory value %d\n", *shmaddr);
*shmaddr = rand() % 10; // 将首字节置为9-0中的一个数字
printf("CLIENT: set shared memory value to %d\n", *shmaddr);
}
shmdt(shmaddr);
shmctl(shmid, IPC_RMID, NULL);
return 0;
}
该程序使用shmget()函数创建一个共享内存,然后使用shmat()将该共享内存附加到进程的地址空间,子进程SERVER将共享内存首字节置为-1,并等待首字节值不为-1,然后再将首字节置为-1;子进程CLIENT则等待首字节值不为-1,读取该值并将首字节置为9-0中的一个数字。最后使用shmdt()将共享内存从进程的地址空间中分离,并使用shmctl()删除共享内存。