嵌入式Linux作业 shell命令 文件操作 fork子进程 匿名管道
2019-07-13 04:29发布
生成海报
一、解释shell命令
- 1、gcc hello.c -o hello:将hello.c文件编译生成可执行文件hello
- 2、./hello:执行当前文件夹下的hello文件
- 3、gdb hello:用gdb调试hello程序
二、解释程序中指定的句子的功能
将所有不重复的依赖文件编译编译成可执行文件,以目标文件的完整名称命名
- 2、fd=open("temp.log",O_RDONLY);
以只读方式打开当前文件夹下的temp.log文件
- size=read(fd,buffer,sizeof(buffer));
将读取到的文件内容保存到buffer指定的字符串数组中,返回读取的字符个数
- 3、FILE*fp=fopen("recfile","w");
定义一个名为fp的FEIL类型指针,用来调用fopen()函数,以只写方式打开当前目录下的recfile文件,如果打开成功,将文件起始位置地址返回给fp指针,否则返回NUll
- 4、execlp("ps","ps","-ef",NULL);
execlp()从PATH 环境变量所指的目录中查找ps命令程序并执行,以全格式查看当前所有进程
- 5、pid_w=waitpid(pid,NULL,WNOHANG);
父进程以非阻塞方式等待子进程结束,若有子进程退出,则waitpid返回子进程识别码pid;若没有子进程推出,则waitpid返回0
- 6、int ret = mkfifo(write_fifo_name,S_IRUSR | S_IWUSR);
创建名为write_fifo_name的fifo有名管道文件,一个进程拥有读权限,一个进程拥有写权限
三、(1)
#include
#include
#include
#include
#include
#include
#include
int main()
{
int fd,size;
char text[]="Neme+Number
";
char buffer[50];
pid_t pid,pid_w;
pid=fork();
if(pid < 0)
exit(1);
else if(pid == 0)
{
fd=open("text.txt",O_RDWR|O_CREAT);
if(fd == -1)
{
printf("Open or creat text.txt failed.
");
}
write(fd,text,sizeof(text));
close(fd);
fd=open("text.txt",O_RDWR);
if( fd== -1)
{
printf("Open text.txt failed
");
return -1;
}
size=read(fd,buffer,sizeof(buffer));
close(fd);
printf("%s",buffer);
exit(0);
}
else
{
pid_w=wait(NULL);
//printf("Child exit
");
}
return 0;
}
三、(2)
#include
#include
#include
#include
#include
#include
int main()
{
int fd[2],readFd;
pid_t child;
char text[]="Name+Number
";
char readbuffer[100];
pipe(fd);
if(fd < 0)
{
printf("build failed
");
return -1;
}
child=fork();
if(child == -1)
{
perror("fork failed");
exit(1);
}
if(child == 0)
{ close(fd[1]); //关闭写
sleep(1);
readFd=read(fd[0],readbuffer,sizeof(readbuffer));
printf("%s",readbuffer);
close(fd[0]); //关闭读
exit(0);
}
else
{
close(fd[0]); //关闭读
write(fd[1],text,strlen(text));
close(fd[1]); //关闭写
}
return (0);
}
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮