C语言的isatty函数和ttyname函数以及sendmsg函数用法

 更新时间:2015年09月07日 08:52:58   投稿:goldensun  
这篇文章主要介绍了C语言的isatty函数和ttyname函数以及sendmsg函数用法,是C语言入门学习中的基础知识,需要的朋友可以参考下

isatty()函数
头文件:

#include <unistd.h>

定义函数:

int isatty(int desc);

函数说明:如果参数 desc 所代表的文件描述词为一终端机则返回1, 否则返回0.

返回值:如果文件为终端机则返回1, 否则返回0.

C语言ttyname()函数:返回一终端机名称
头文件:

#include <unistd.h>

定义函数:

char * ttyname(int desc);

函数说明:如果参数desc 所代表的文件描述词为一终端机, 则会将此终端机名称由一字符串指针返回, 否则返回NULL.

返回值:如果成功则返回指向终端机名称的字符串指针, 有错误情况发生时则返回NULL.

范例

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
main()
{
  int fd;
  char * file = "/dev/tty";
  fd = open (fiel, O_RDONLY);
  printf("%s", file);
  if(isatty(fd))
  {
   printf("is a tty. \n");
   printf("ttyname = %s \n", ttyname(fd));
  }
  else
   printf(" is not a tty\n");
  close(fd);
}

执行:

/dev/tty is a tty ttyname = /dev/tty

C语言sendmsg()函数:经socket传送数据
头文件:

#include <sys/types.h>  #include <sys/socket.h>

定义函数:

int sendmsg(int s, const strcut msghdr *msg, unsigned int flags);

函数说明:sendmsg()用来将数据由指定的socket 传给对方主机. 参数s 为已建立好连线的socket, 如果利用UDP 协议则不需经过连线操作. 参数msg 指向欲连线的数据结构内容, 参数flags 一般默认为0, 详细描述请参考send().

结构msghdr 定义如下:

struct msghdr
{
  void *msg_name; //Address to send to /receive from .
  socklen_t msg_namelen; //Length of addres data
  strcut iovec * msg_iov; //Vector of data to send/receive into
  size_t msg_iovlen; //Number of elements in the vector
  void * msg_control; //Ancillary dat
  size_t msg_controllen; //Ancillary data buffer length
  int msg_flags; //Flags on received message
};

返回值:成功则返回实际传送出去的字符数, 失败返回-1, 错误原因存于errno

错误代码:
1、EBADF 参数s 非合法的socket 处理代码.
2、EFAULT 参数中有一指针指向无法存取的内存空间
3、ENOTSOCK 参数s 为一文件描述词, 非socket.
4、EINTR 被信号所中断.
5、EAGAIN 此操作会令进程阻断, 但参数s 的socket 为不可阻断.
6、ENOBUFS 系统的缓冲内存不足
7、ENOMEM 核心内存不足 EINVAL 传给系统调用的参数不正确.

相关文章

  • C++设计模式中的桥模式你了解吗

    C++设计模式中的桥模式你了解吗

    这篇文章主要为大家详细介绍了C++设计模式中的桥模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++计算圆形、矩形和三角形的面积

    C++计算圆形、矩形和三角形的面积

    这篇文章介绍了C++计算圆形、矩形和三角形面积的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • C++基于easyx实现迷宫游戏

    C++基于easyx实现迷宫游戏

    这篇文章主要为大家详细介绍了C++基于easyx实现迷宫游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C语言实现程序开机自启动

    C语言实现程序开机自启动

    本文给大家分享的是一则C语言实现开机自启动的代码,主要是通过C来获取程序路径修改注册表项来实现,有需要的小伙伴可以参考下
    2016-01-01
  • C语言数据输入与输出实例详解

    C语言数据输入与输出实例详解

    这篇文章主要介绍了C语言数据输入与输出实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • IOS 开发UITextView回收或关闭键盘

    IOS 开发UITextView回收或关闭键盘

    这篇文章主要介绍了IOS 开发UITextView回收或关闭键盘的相关资料,需要的朋友可以参考下
    2017-06-06
  • C++string底层框架模拟实现代码

    C++string底层框架模拟实现代码

    本节文章主要说明浅拷贝和深拷贝的优缺点,以及仿写string类的逻辑并分析实现过程,对C++string底层框架模拟实现代码感兴趣的朋友一起看看吧
    2021-11-11
  • Qt连接MySQL数据库的实现(保姆级成功版教程)

    Qt连接MySQL数据库的实现(保姆级成功版教程)

    本文主要介绍了Qt连接MySQL数据库的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 详谈全排列next_permutation() 函数的用法(推荐)

    详谈全排列next_permutation() 函数的用法(推荐)

    下面小编就为大家带来一篇详谈全排列next_permutation() 函数的用法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 简述C++11就地初始化与列表初始化

    简述C++11就地初始化与列表初始化

    这篇文章主要介绍了C++11就地初始化与列表初始化的相关资料,帮助大家更好的理解和学习C++,感兴趣的朋友可以了解下
    2020-08-08

最新评论