如何查找Linux中一些特殊数据类型定义,比如pid_t和uid_t

如何查找Linux中一些特殊数据类型定义,比如pid_t和uid_t,第1张

在sys/types.h头烂段文件中搜索pid_t,可以找卜历喊到下面的语句: #ifndef __pid_t_defined typedef __pid_t pid_t# define __pid_t_defined #endif 可以看到pid_t类型其实就是__pid_t类型,但是在sys/types.h在头文件中没有找到__pid_t这个类型,这个时候应该怎么办呢?看sys/types.h中包含的头文件,即include语句,从这些语句型野中选择bits/types.h这个头文件,至于为什么这就牵涉到内核的一些类型定义的规则或者叫规律,但是一般按照先sys目录然后再bits目录都没有错。在bits/types.h头文件中可以找到下面的语句: __STD_TYPE __PID_T_TYPE __pid_t也就是说__pid_t其实是__PID_T_TYPE类型,而这个类型在哪定义呢?也是先看include语句,选择bits/typesizes.h头文件,也是经验,从这个头文件中就可以找到下面的语句: #define __PID_T_TYPE __S32_TYPE 也就是说__PID_T_TYPE其实是__S32_TYPE类型,如果单从字面意思看的话这应该是一个32位的整形或者其他类型,但是千万不要这么早下结论。而这个类型在bits/typesize.h中找不到,而且这个头文件中也没有include语句,这个时候怎么办呢?还去bits/types.h中找,可以找到下面的语句: #define __S32_TYPE int 至此,终于找到了,pid_t其实就是int类型。在32位机下pid_t是32位的整数,在64位机下pid_t是64位整数,所以看到__S32_TYPE这样的类型千万不要过早地下结论是32位或64位。总结一下,找一个类型,一般的过程就是(比如从xxx.h开始): xxx.h----->sys/xxx.h----->bits/xxx.h----->bits/types.h和bits/typesize.h 或者有时还要去asm目录和asm-generic目录中的头文件中找。还有一种方式就是在linux内核源码中找,但是可能某些同学感觉不爽,哈哈!

1、要用到unistd.h头文件。

2、 Write函数用法:write函数所在的头文件为 <unistd.h>write有敏袭圆两种用法。一种是:ssize_twrite(int handle, void *buf, int nbyte)handle 是文件描述符;buf是指定的缓冲区,即指针,指向一段内存单元;nbyte是要写入文件指定的禅唤字节数;返回值:写入文档的字节数(成功);-1(出错)write函数把buf中nbyte写入文件描述符handle所指的文档,成功时返回写的字节数,错误时返回-1.另一种是:write(const char* str,int n)str是字符指针或字符数组,用来存放一个字符串。n是int型数,它用来表示输出显示字符串中字符的个数。write("string",strlen("string")表示输出字符串常量3、程序示例:

#include <stdio.h>

#include <stdlib.h>

#include <fcntl.h>

#include <sys\stat.h>

#include <io.h>

#include <string.h>

int main(void)

{

int *handlechar string[40]

int length, res/* Create a file named "TEST.$$$" in the current directory and write a string to it. If "TEST.$$$" already exists, it will be overwritten. */

if ((handle = open("TEST.$$$"桥塌, O_WRONLY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE)) == -1)

{

printf("Error opening file.\n")

exit(1)

}

strcpy(string, "Hello, world!\n")

length = strlen(string)

if ((res = write(handle, string, length)) != length)

{

printf("Error writing to the file.\n")

exit(1)

}

printf("Wrote %d bytes to the file.\n", res)

close(handle)return 0}

socklen_t在windows和linux平台下的定义

windows平台下:

头文件:#include<ws2tcpip.h>

linux平台下:

头文件:

1)#include <sys/socket.h>

2)#include <unistd.h>拦团

详细定义:typedef int socklen_t

在套接字编程谈衡液中,很多函数含物中使用到,例如

recvfrom accept setsockopt

pid_t 子进程的ID


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8199496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存