美文网首页
文件描述符012

文件描述符012

作者: 不爱钱的张师傅 | 来源:发表于2019-06-18 22:29 被阅读0次
  1. 每一个 Linux 进程,启动时会新建三个文件描述符 0,1,2.我们称呼它们为 标准输入,标准输出,标准错误。
    文件描述符是用来操作文件的一个标识,是一个数字。

ps -ef 可见所有进程,选择一个进程的 PID,如 22575
查看该进程所有的文件描述符:lsof -p 进程号
[root@localhost asm-generic]# lsof -p 22575
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 22575 root txt REG 253,0 964608 50339657 /usr/bin/bash
...
...
bash 22575 root 0u CHR 136,1 0t0 4 /dev/pts/1
bash 22575 root 1u CHR 136,1 0t0 4 /dev/pts/1
bash 22575 root 2u CHR 136,1 0t0 4 /dev/pts/1
bash 22575 root 255u CHR 136,1 0t0 4 /dev/pts/1
[root@localhost asm-generic]#

如上,FD 对应的应该就是 进程 22575 新建的文件描述符 0,1,2,255,等等文件描述符
可见,这三个文件描述符都指向了一个文件 /dev/pts/1 ,也就是我当前的 终端屏幕。
再找一个进程举例:
pickup 25512 postfix 0u CHR 1,3 0t0 1028 /dev/null
pickup 25512 postfix 1u CHR 1,3 0t0 1028 /dev/null
pickup 25512 postfix 2u CHR 1,3 0t0 1028 /dev/null
在这个进程,它们指向 /dev/null 。

  1. 操作这三个文件描述符。

将 “123”写入到普通文件
int fd = open ( "fd.txt",O_CREAT|O_RDWR );
write ( fd, "123", sizeof("123" ) );

将 “123”写入到标准错误:
write ( 2, buf, sizeof( buf ) );

执行程序可见差异。
全部代码:
[root@localhost test]# cat fds.c

include <stdio.h>

include <fcntl.h>

include <unistd.h>

include <sys/socket.h>

include <errno.h>

int main()
{

char buf[1024]="1234\n";
int fd;
if(write(2,buf,sizeof(buf))==-1)
printf("error\n");
buf[0]='a';

if(write(1,buf,sizeof(buf))==-1)
printf("error\n");

if(write(0,buf,sizeof(buf))==-1)
printf("error\n");

fd = open("ddd.txt",O_CREAT|O_RDWR);
if(write(3,buf,sizeof(buf))==-1)
printf("error\n");

return 0;
}
运行结果:
[root@localhost test]# ./a.out
1234
a234
a234
[root@localhost test]# cat ddd.txt
a234
[root@localhost test]#

如上,输入到这三个文件的内容都输出在了屏幕。而输入文件的内容没有输出到屏幕,而是输出到了文件里。
可见,没有对它们重定向的话,默认是指向 当前终端。

如果对你有所帮助,点个赞吧。如果有错误,请告知,谢谢啦。

相关文章

  • 文件描述符012

    每一个 Linux 进程,启动时会新建三个文件描述符 0,1,2.我们称呼它们为 标准输入,标准输出,标准错误。文...

  • 第三章 文件I/O

    文件描述符 所有打开的文件都通过文件描述符引用。操作(读写)该文件描述符就相当于操作该文件。文件描述符是一个非负的...

  • 第三章 文件IO

    对于内核而言,所有打开的文件都通过文件描述符引用,文件描述符是一个非负整数文件描述符标准符号常量文件描述符0标准输...

  • ios进阶路线 shell脚本语言基础教程(四)

    上篇我们讲了文件描述符还有自定义文件描述符,补充一下如何关闭自定义的文件描述符 语法:exec 描述符>&- 案例...

  • Linux中文件描述符,重定向与标准输入输出

    Linux中文件描述符,重定向与标准输入输出 文件描述符:内核(kernel)利用文件描述符(file descr...

  • 文件I/O和记录锁

    文件描述符: 文件描述符是一个非负整数,所有打开的文件都通过文件描述符引用。按照惯例:0(STDIN_FILENO...

  • 认识安卓的文件描述符FileDescriptor

    理解文件描述符 文件描述符(FileDescriptor) 这是Unix/Linux系统文件操作的相关概念,And...

  • ulimit ps dmesg which stat 命令小结

    ulimit 设置查看文件描述符命令 ulimit -n查看文件描述符 ulimit -SHn 65535设置文件...

  • 文件描述符

    内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件...

  • Shell--呈现数据

    文件描述符 用stdout和stderr文件描述符来在多个位置生成输出,重定向相应的文件描述符 临时重定向 在脚本...

网友评论

      本文标题:文件描述符012

      本文链接:https://www.haomeiwen.com/subject/ufwqqctx.html