当前位置:  技术问答>linux和unix

vi下头文件unistd.h

    来源: 互联网  发布时间:2016-05-01

    本文导语:  我在linux的vi下编辑一个程序: 用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话:     Child 1 is sending a message!     Child 2 is sending a message! 父进程从管道中读出二个来自子进程的信息...

我在linux的vi下编辑一个程序:
用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话:

    Child 1 is sending a message!

    Child 2 is sending a message!

父进程从管道中读出二个来自子进程的信息并显示。

代码如下:

#include     
                                                                                                             
int pid1,pid2;
                                                                                                             
int main( )
{
    int fd[2];
    char outpipe[100],inpipe[100];
    pipe(fd);                       /*创建一个管道*/
    while ((pid1=fork( ))==-1);
    if(pid1==0)
    {
          lockf(fd[1],1,0);
          sprintf(outpipe,"child 1 process is sending message!");     
                                       /*把串放入数组outpipe中*/
          write(fd[1],outpipe,50);     /*向管道写长为50字节的串*/
          lockf(fd[1],0,0);
          exit(0);
    }
 else
    {
          while((pid2=fork( ))==-1);
          if(pid2==0)
          {
              lockf(fd[1],1,0);           /*互斥*/
              sprintf(outpipe,"child 2 process is sending message!");
              write(fd[1],outpipe,50);      
              lockf(fd[1],0,0);
              exit(0);
          }
          else
          {
              wait(0);              /*同步*/
              read(fd[0],inpipe,50);   /*从管道中读长为50字节的串*/
              printf("%sn",inpipe);
              wait(0);
              read(fd[0],inpipe,50);
              printf("%sn",inpipe);
              exit(0);
        }
    }
    return 0;
}


我试了一下这个程序可通过编译,而且运行结果也是预期的。

但是这个程序没有包含头文件unistd,

而pipe()的头文件是unistd,那为什么不含unistd程序也能达到预期的效果呢?

|

那是因为你的警告级别不够,试这个:
gcc -g -O2 -Wall

|
linux 下 gcc 自动连接一些常用的函数

用 -Wall 选项就可以看到这堆 warning

lz 应该加上头文件 unistd.h 和 stdlib.h

test.c: In function 'main':
test.c:3: warning: implicit declaration of function 'pipe'
test.c:3: warning: implicit declaration of function 'fork'
test.c:3: warning: implicit declaration of function 'lockf'
test.c:3: warning: implicit declaration of function 'write'
test.c:3: warning: implicit declaration of function 'exit'
test.c:3: warning: incompatible implicit declaration of built-in function 'exit'
test.c:3: warning: incompatible implicit declaration of built-in function 'exit'
test.c:3: warning: implicit declaration of function 'wait'
test.c:3: warning: implicit declaration of function 'read'
test.c:3: warning: incompatible implicit declaration of built-in function 'exit'

|
编译的时候没有警告吗?可能是编译器会自动连接一些常用的函数吧。

|
unistd.h不是c语言的东西,是linux/unix的系统调用,包含了许多 U N I X系统服务的函数原型

|
K  ------->when the cursor  in the function position while edited by vi

|
貌似已经解决了吧.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 eof():如果处于文件结尾处则返回true
  • Shell脚本如何递归现实一个文件夹中的文件(文件夹中含有文件夹)
  • WinDows8最新版文件夹加密
  • 求命令:什么命令可以把文件夹下所有的文件按修改时间先后排出来,包括子文件夹里的文件。
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • [提问]Linux下如何把多个.a文件编译一个.so文件,或者把多个.so文件编译成一个.so文件
  • python异常信息堆栈输出到日志文件
  • 请问:proc中的头文件中能包含头文件吗?(感觉如果头文件中包含头文件的话,在链接时就会有错误啊)
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 我要实现当进程打开文件时,根据文件名判断是否符合要求,符合后处理文件,再把文件返回给进程,怎么实现啊
  • 在MyEclipse中设开启xml文件自动提示和自动完成功能
  • vi 中编辑两个文件,怎样从其中一个文件拷一段内容到另一个文件中。(同时打开两个文件)
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 怎么统计一个文件夹下有多少个文件(不包括文件夹)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 请教高手一个简单问题:给定一个文件名,如何去查找该文件正在被几个程序使用,并怎么样才可以切断这个文件与正在打开该文件的程序之间的
  • MyEclipse如何查看和设置文件编码格式相关操作
  • linux 下的 .a 文件 .o 文件 是什么文件?各有什么作用?
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 如何用socket一次传输多个文件,如何确定文件一个文件结束
  • 设置sharepoint 2010文档库中的 pdf文件在浏览器中访问的打开方式
  • 如何删除某个目录下除了指定文件夹之外的所有文件和文件夹


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3