《APUE》第6章练习1

问题:编写一个程序,它调用uname并输出utsname结构中的所有字段,并将输出与uname(1)命令的输出结构做比较。

我本来以为utsname结构也跟passwd结构一样,也有那三个函数来获取整个结构的内容,但是看了头文件后才发现,头文件里面除了结构体的定义就只有这个uname函数了。

我用逐项输出成员的内容来模仿uname命令,我不知道有没有可以用循环的方式来输出一个结构的内容。

下面给出我的代码:

 1 /* 调用uname并输出utename结构中的所有字段 */
 2 #include <sys/utsname.h>
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5
 6 #define MAX 200
 7
 8 int main(void)
 9 {
10     struct utsname buf;
11
12     if (uname(&buf) == -1)
13         exit(1);
14
15     printf("system name: %s\n", buf.sysname);
16     printf("nodename: %s\n", buf.nodename);
17     printf("release: %s\n", buf.release);
18     printf("version: %s\n", buf.version);
19     printf("machine: %s\n", buf.machine);
20     printf("domainname: %s\n", buf.__domainname);
21
22     return 0;
23 }

这是跟uname -a 比较的结果:

00

就差了几个X86_64和GNU/Linux,那个domainname是关于网络的我也不太明白。

ps:在网上搜怎么man一个头文件的时候,我以外地发现了vim的两个好命令!1.用gf可以进入头文件查看文件内容;2.用shift+k就可以查看某函数的说明(即man func)

时间: 2024-09-29 06:37:34

《APUE》第6章练习1的相关文章

apue第三章习题的一些拙见(不定时更新)

写在前面:本人通信专业大二,自学apue,时间有限,这个系列都是抽时间写的,目前已经看到15章,现在从头做题,如有错误还请指教. 第一题: write和read这样的函数都属于系统调用,这里具体所指的没有缓冲区是没有用户缓冲区,而不是指没有内核缓冲区,这里以我个人的认识认为,这里write和read将数据拷贝到缓冲区后并不直接写到文件中,而是等一定条件发生后才写进去,但是具体机制还需研究.同时这里也暴露了一个问题,每次进行I/O都需要进行系统调用,这无疑是对系统资源的一种浪费,所以这也为后来的标

apue第四章 文件和目录

函数stat,fstat,fstatat, lstat #include <sys/stat.h> int stat(const char *restrict pathname, struct stat *restrict buf); int fstat(int fd, struct stat *buf); int lstat(const char *restrict pathname, struct stat *restrict buf); int lstat(int fd, const c

apue 第14章 高级I/O

1.引言 2.非阻塞I/O 系统调用分为两类:低速系统调用和其他. 低速系统调用是可以使进程永远阻塞的一类系统调用 如果某些文件类型(读管道.终端设备和网络设备)的数据并不存在,读操作可能会使调用者永远阻塞 如果数据不能被相同的文件类型立即接受(管道中无空间.网络流控制).写操作可能会使调用者永远阻塞 在某种条件发生之前打开某些文件类型可能会发生阻塞 对已经加上强制性记录锁的文件进行写 某些ioctl操作 某些进程间通信函数 非阻塞I/O使我们可以发出open,read和write这样的I/O操

APUE第五章标准I/O库

使用标准IO库时,进程(或者是shell)自动打开并关联到程序运行窗口的标准输入输出流对象,为标准输入,标准输出,标准出错,这些流对象引用的文件,与不带缓冲的IO函数使用的文件描述符,它们关联的文件对是相同的,这些文件应该指的就是那些窗口,窗口在显示器上(显示器是文件),如果使用了重定向,那么所谓的文件,就是硬盘上的指定文件.也就是说,流对象(标准IO使用)与文件描述符(不带缓冲的IO使用),它们关联到相同的文件. 程序清单5-2用fgets和fputs将标准输入复制到标准输出 #include

apue 第19章 伪终端

伪终端是指对于一个应用程序而言,他看上去像一个终端,但事实上它并不是一个真正的终端. 进程打开伪终端设备,然后fork.子进程建立一个新的会话,打开一个相应的伪终端从设备.复制输入.输出和标准错误文件描述符,调用exec,子进程从设备编程伪终端. 伪终端能像终端一样,但是无意义的函数调用如改变波特率.发送中断符.设置奇偶校验将被忽略. 伪终端可以做输入和输出. posix_opent函数提供了一种可移植的方法来打开下一个可用伪终端主设备 #include <stdlib.h> #include

apue第四章习题的一些拙见(不定时更新)

写在前面:最近要期末考试,看来真的是要不定时更新啦XD apue4.1: 由于在这里lstat是不跟随符号文件的,而stat是跟随符号文件的,这样一来,如果使用stat,而不使用lstat那么就无法观察到符号文件.在书上4.3姐中有提到. apue4.2: 首先我在ubuntu的shell上查看原来的umask是多少,结果是0002,这里touch一个文件是不确定的,但是其他者的权限中写的权限一定是没有的.因为创建一个文件所拥有的权限不光与umask有关还与应用程序自身在创建的时候使用的参数有关

APUE第7章进程环境 命令行参数 环境表 存储布局

7.4命令行参数

apue 第4章 文件和目录

获取文件属性 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *pathname, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *pathname, struct stat *buf); #include <fcntl.h> #i

apue 第10章 信号signal

每种信号都有名字,都是以SIG开头 信号机制最简单的接口是signal函数 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 返回值:成功以前的信号处理配置,出错SIG_ERR kill函数将信号发送给进程或进程组.raise函数则允许进程向自身发送信号 #include <sys/types.h> #includ

【转】《APUE》第三章笔记(4)及习题3-2

原文网址:http://www.cnblogs.com/fusae-blog/p/4256794.html APUE第三章的最后面给出的函数,现在还用不着,所以,先留个名字,待到时候用着了再补上好了. dup和dup2函数:用来复制文件描述符的 sync函数,fsync函数和fdatasync函数:大致的功能是将缓冲区的数据刷进队列中,等待写入到硬盘中. fcnti函数:可以改变已打开文件的性质. ioctl函数:控制设备. 习题: 1.当读/写磁盘文件时,本章中描述的函数是否有缓冲机制?请说明