linux编程-关于Linux的三个编程题,想了半天毫无头绪,感觉Linux编程好复杂。求大家帮助帮助我,谢谢。

问题描述

关于Linux的三个编程题,想了半天毫无头绪,感觉Linux编程好复杂。求大家帮助帮助我,谢谢。

1:子进程每隔一秒向文件写入信息,父进程每隔三秒读出子进程所写的信息并输出到屏幕。
2:模拟shell,设计一个交互式命令处理程序,注意对命令参数和环境参数的处理。
3:编写一个守护进程,实现功能为:每隔一秒,向当前目录下的hello文件里写入一行helloworld。

解决方案

Linux设备驱动编程之复杂设备驱动
25岁了,是学linux运维还是编程好呢?求指点下 ..

解决方案二:

楼上说的非常对,我很赞同

解决方案三:

这是我写的守护进程

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>

//创建守护进程
void init_daemon(){
    pid_t pid;
    int i;
    if(pid = fork()){
        //是父进程,结束父进程
        exit(0);
    }else if(pid < 0){
        //fork失败,退出
        perror("fork error");
        exit(-1);
    }else{
        //第一个子进程,后台继续执行
        setsid();//第一个子进程成为新的会话组长和进程组长并与控制终端分离
        if(pid = fork()){
            //是第一个子进程,结束
            exit(0);
        } else if(pid < 0){
            perror("fork");
            exit(-1);
        }else{
            //第二个子进程,继续,其不再是会话组长
            for(i = 0; i < getdtablesize();i++){
                //关闭打开的文件描述符
                close(i);
            }
            //重设文件创建掩码
            umask(0);
        }
    }
}

int main()
{
    char *buf = "hello world
";
    int fd;
    init_daemon();
    while(1){
        if(fd = open("hello.txt",O_CREAT|O_WRONLY|O_APPEND,0600)<0){
            perror("open");
            exit(-1);
        }
        write(fd,buf,strlen(buf));
        close(fd);
        sleep(1);
    }
    return 0;
}

解决方案四:

这是我写的守护进程

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>

//创建守护进程
void init_daemon(){
    pid_t pid;
    int i;
    if(pid = fork()){
        //是父进程,结束父进程
        exit(0);
    }else if(pid < 0){
        //fork失败,退出
        perror("fork error");
        exit(-1);
    }else{
        //第一个子进程,后台继续执行
        setsid();//第一个子进程成为新的会话组长和进程组长并与控制终端分离
        if(pid = fork()){
            //是第一个子进程,结束
            exit(0);
        } else if(pid < 0){
            perror("fork");
            exit(-1);
        }else{
            //第二个子进程,继续,其不再是会话组长
            for(i = 0; i < getdtablesize();i++){
                //关闭打开的文件描述符
                close(i);
            }
            //重设文件创建掩码
            umask(0);
        }
    }
}

int main()
{
    char *buf = "hello world
";
    int fd;
    init_daemon();
    while(1){
        if(fd = open("hello.txt",O_CREAT|O_WRONLY|O_APPEND,0600)<0){
            perror("open");
            exit(-1);
        }
        write(fd,buf,strlen(buf));
        close(fd);
        sleep(1);
    }
    return 0;
}

解决方案五:

这是我写的守护进程

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>

//创建守护进程
void init_daemon(){
    pid_t pid;
    int i;
    if(pid = fork()){
        //是父进程,结束父进程
        exit(0);
    }else if(pid < 0){
        //fork失败,退出
        perror("fork error");
        exit(-1);
    }else{
        //第一个子进程,后台继续执行
        setsid();//第一个子进程成为新的会话组长和进程组长并与控制终端分离
        if(pid = fork()){
            //是第一个子进程,结束
            exit(0);
        } else if(pid < 0){
            perror("fork");
            exit(-1);
        }else{
            //第二个子进程,继续,其不再是会话组长
            for(i = 0; i < getdtablesize();i++){
                //关闭打开的文件描述符
                close(i);
            }
            //重设文件创建掩码
            umask(0);
        }
    }
}

int main()
{
    char *buf = "hello world
";
    int fd;
    init_daemon();
    while(1){
        if(fd = open("hello.txt",O_CREAT|O_WRONLY|O_APPEND,0600)<0){
            perror("open");
            exit(-1);
        }
        write(fd,buf,strlen(buf));
        close(fd);
        sleep(1);
    }
    return 0;
}

解决方案六:

这是我写的守护进程

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>

//创建守护进程
void init_daemon(){
    pid_t pid;
    int i;
    if(pid = fork()){
        //是父进程,结束父进程
        exit(0);
    }else if(pid < 0){
        //fork失败,退出
        perror("fork error");
        exit(-1);
    }else{
        //第一个子进程,后台继续执行
        setsid();//第一个子进程成为新的会话组长和进程组长并与控制终端分离
        if(pid = fork()){
            //是第一个子进程,结束
            exit(0);
        } else if(pid < 0){
            perror("fork");
            exit(-1);
        }else{
            //第二个子进程,继续,其不再是会话组长
            for(i = 0; i < getdtablesize();i++){
                //关闭打开的文件描述符
                close(i);
            }
            //重设文件创建掩码
            umask(0);
        }
    }
}

int main()
{
    char *buf = "hello world
";
    int fd;
    init_daemon();
    while(1){
        if(fd = open("hello.txt",O_CREAT|O_WRONLY|O_APPEND,0600)<0){
            perror("open");
            exit(-1);
        }
        write(fd,buf,strlen(buf));
        close(fd);
        sleep(1);
    }
    return 0;
}

解决方案七:

这是我写的守护进程

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>

//创建守护进程
void init_daemon(){
    pid_t pid;
    int i;
    if(pid = fork()){
        //是父进程,结束父进程
        exit(0);
    }else if(pid < 0){
        //fork失败,退出
        perror("fork error");
        exit(-1);
    }else{
        //第一个子进程,后台继续执行
        setsid();//第一个子进程成为新的会话组长和进程组长并与控制终端分离
        if(pid = fork()){
            //是第一个子进程,结束
            exit(0);
        } else if(pid < 0){
            perror("fork");
            exit(-1);
        }else{
            //第二个子进程,继续,其不再是会话组长
            for(i = 0; i < getdtablesize();i++){
                //关闭打开的文件描述符
                close(i);
            }
            //重设文件创建掩码
            umask(0);
        }
    }
}

int main()
{
    char *buf = "hello world
";
    int fd;
    init_daemon();
    while(1){
        if(fd = open("hello.txt",O_CREAT|O_WRONLY|O_APPEND,0600)<0){
            perror("open");
            exit(-1);
        }
        write(fd,buf,strlen(buf));
        close(fd);
        sleep(1);
    }
    return 0;
}

解决方案八:

这是我写的守护进程

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>

//创建守护进程
void init_daemon(){
    pid_t pid;
    int i;
    if(pid = fork()){
        //是父进程,结束父进程
        exit(0);
    }else if(pid < 0){
        //fork失败,退出
        perror("fork error");
        exit(-1);
    }else{
        //第一个子进程,后台继续执行
        setsid();//第一个子进程成为新的会话组长和进程组长并与控制终端分离
        if(pid = fork()){
            //是第一个子进程,结束
            exit(0);
        } else if(pid < 0){
            perror("fork");
            exit(-1);
        }else{
            //第二个子进程,继续,其不再是会话组长
            for(i = 0; i < getdtablesize();i++){
                //关闭打开的文件描述符
                close(i);
            }
            //重设文件创建掩码
            umask(0);
        }
    }
}

int main()
{
    char *buf = "hello world
";
    int fd;
    init_daemon();
    while(1){
        if(fd = open("hello.txt",O_CREAT|O_WRONLY|O_APPEND,0600)<0){
            perror("open");
            exit(-1);
        }
        write(fd,buf,strlen(buf));
        close(fd);
        sleep(1);
    }
    return 0;
}

解决方案九:

这是我写的守护进程

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>

//创建守护进程
void init_daemon(){
    pid_t pid;
    int i;
    if(pid = fork()){
        //是父进程,结束父进程
        exit(0);
    }else if(pid < 0){
        //fork失败,退出
        perror("fork error");
        exit(-1);
    }else{
        //第一个子进程,后台继续执行
        setsid();//第一个子进程成为新的会话组长和进程组长并与控制终端分离
        if(pid = fork()){
            //是第一个子进程,结束
            exit(0);
        } else if(pid < 0){
            perror("fork");
            exit(-1);
        }else{
            //第二个子进程,继续,其不再是会话组长
            for(i = 0; i < getdtablesize();i++){
                //关闭打开的文件描述符
                close(i);
            }
            //重设文件创建掩码
            umask(0);
        }
    }
}

int main()
{
    char *buf = "hello world
";
    int fd;
    init_daemon();
    while(1){
        if(fd = open("hello.txt",O_CREAT|O_WRONLY|O_APPEND,0600)<0){
            perror("open");
            exit(-1);
        }
        write(fd,buf,strlen(buf));
        close(fd);
        sleep(1);
    }
    return 0;
}

解决方案十:

不好意思,点多了几下,能删除么

时间: 2024-09-20 17:57:20

linux编程-关于Linux的三个编程题,想了半天毫无头绪,感觉Linux编程好复杂。求大家帮助帮助我,谢谢。的相关文章

《Linux 高级程序设计(第三版)》——第2章 Linux下C语言开发工具 2.1 常用编辑工具

第2章 Linux下C语言开发工具 Linux 高级程序设计(第三版) Linux操作系统绝大多数的内核代码都是由C语言编写,因此,在Linux下的应用程序,特别是需要与内核进行交互的程序一般都是由C语言编写的,C++程序并不多见,例如驱动开发几乎都是由C语言编写的.因此,本书所有内容都立足于Linux下的C程序开发.本章主要介绍Linux下进行C语言程序开发所必备的工具. 本章第1节主要介绍Linux环境下常用的开发工具,包括常用的编辑器.这些编辑器类似于Windows平台下的记事本和Word

《Linux 高级程序设计(第三版)》——第1章  Linux下C语言开发环境 1.1 Linux操作系统简介

第1章 Linux下C语言开发环境 Linux应用程序开发平台有别于Windows应用程序开发平台,因此在介绍具体编程内容之前,本书第1.2章主要介绍Linux操作系统下C语言程序的开发环境和开发工具. 本章主要介绍Linux下C语言开发环境,包括一些基本概念和基本编程环境.本章第1节主要对Linux操作系统及其相关术语进行了简要介绍. 本章第2节主要介绍Linux操作系统下编程基本概念以及如何获得Linux下的帮助文件,包括Linux操作系统下C语言库文件标准以及系统调用的基本概念. 本章第3

《Linux 高级程序设计(第三版)》——1.4 Linux下编码风格

1.4 Linux下编码风格 Linux 高级程序设计(第三版) 下面为读者列出GNU编码规范和Linux内核编码规范示例. 1.4.1 GNU编码规范 下面是GNU emacs中的一段代码. /* Interface from Emacs to terminfo. Copyright (C) 1985, 1986 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software;

《Linux 高级程序设计(第三版)》——1.3 部分常用工具简介

1.3 部分常用工具简介 Linux 高级程序设计(第三版)1.3.1 tar打包器 如果要发布包含大量程序和文档的程序,则需对其进行打包压缩.在Shell命令行下,可以使用的文件压缩工具有:gzip.bzip2和zip.相应的压缩和解压工具如表1-5所示. tar类型的文件是几个文件和(或)目录在一个文件中的集合,tar命令用来创建备份和归档.tar使用的选项有以下几项. -c:创建一个新归档. -x:从归档中抽取文件.即解压缩. -j:压缩/解压bz2格式tar文件. -z:压缩/解压gz格

《Linux 高级程序设计(第三版)》——1.2 Linux开发初步

1.2 Linux开发初步 Linux 高级程序设计(第三版)1.2.1 Linux下C程序标准在Linux操作系统下进行C程序开发的标准主要有两个:ANSI C标准和POSIX标准. ANSI C标准是ANSI(美国国家标准局)于1989年制定的C语言标准,后来被ISO(国际标准化组织)接受为标准,因此也称为ISO C. POSIX标准是最初由IEEE开发的标准族,部分已经被ISO接受为国际标准. 1.ANSI CANSI C的目标是为各种操作系统上的C程序提供可移植性保证(例如Linux与W

ASP.NET AJAX客户端编程之旅(三)

ASP.NET AJAX客户端编程之旅(三)--让JavaScript和C#无障碍沟通:数据类型自动转换&序列化 通过前两篇文章,我们知道使用了ASP.NET AJAX框架后,在JavaScript中调用后台WebService方法非常方便,几乎可以看做是"直接调用".那么,这里引出了一个问题:调用方法就牵扯到参数的传递,而JavaScript和C#毕竟是两种不同的语言,数据类型怎么沟通?简单型数据类型还好说,如果我们需要的参数是个复杂类型呢?如分层架构中经常用到实体类做参数,

《Linux 高级程序设计(第三版)》——2.2 GCC/GDB编译调试工具基础

2.2 GCC/GDB编译调试工具基础 Linux 高级程序设计(第三版) GCC/G++是GNU最优秀的自由软件之一,它主要提供C/C++程序的编译工作.Linux下的C.C++程序开发过程中,一般都采用GCC/G++/GDB工具.将C语言程序编译成一个可执行文件一般都需经过以下4个步骤. (1)预处理(Preprocessing):对源代码文件中的文件包含.宏定义.预编译语句进行分析和替换. (2)编译(Compilation):根据编译器的语法规则,将高级语言转换为以.s为后缀的汇编语言文

linux 库中,这三个有什么不同

问题描述 linux 库中,这三个有什么不同 解决方案 版本不一样,你的图太小了,看不清别的. 解决方案二: 你可以ls -l一下. 有些是问的软链接,其实都指向一个文件. 解决方案三: 蓝绿色的是软链接,你可以使用ls -l看下软连接的库指向哪里,指向哪里就等价于哪个文件 解决方案四: 可以通过ls -la查看一下文件的全部属性,应该可以看到蓝色的两个文件指向了绿色的那个文件,就像上面的哥们解释的一样,蓝色的链接,绿色就是真正的文件,好比在windows下面的快捷方式和快捷方式指向的文件

Linux命名空间学习教程(三) PID

本文讲的是Linux命名空间学习教程(三) PID,[编者的话]Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源.而 LXC所实现的隔离性主要是来自内核的命名空间, 其中pid.net.ipc.mnt.uts 等命名空间将容器的进程.网络.消息.文件系统和hostname 隔离开.本文是Linux命名空间系列教程的第三篇,重点介绍PID命名空间.DockerOne在撸代码的基础上进行了校对和整理. 继上一篇关于IPC namespac