导航:首页 > 文件教程 > unix头文件

unix头文件

发布时间:2023-03-31 02:20:09

⑴ unix的系统调用unlink函数需要哪些头文件

函数原型: int unlink(char *pathname); 一、文件系统基础. 理解unlink()之前,先要对unix的文件系统有基本的了解.一个unix文件系统由4个部分组成: 自举块,超级块,i表,目录块和数据块. 而现在,我们需要关心的仅仅是后两部分. 1、i表。 是i节点的集合.i节点是一个固定长度的记录项(通常是64字节或128字节,不同的文件系统其长度可能不一样),它包含文件的相关信息:文件类型,文件长度,文件存取许可,和指向实际的数据块的指针等,以及一个连接计数,用以指示连接到此i节点的目录项的数目.不知道什么是目录项? 不要紧,马上就会讲到. 2、目录块和数据块. 数据块,不用我讲,相信都知道是文件实际在磁盘上的数据了吧! 目录块,是目录项的集合.每一个目录项中包含2个数据:文件名,i节点号.文件名就是通常我们用ls命令所看到的,i节点号就是该目录项所连接到的i节点. 3、连接到i节点. 可能有细心的朋友就已发现,i节点中的连接计数是用来干什么的?那是因为unix允许多个目录项指向同一个文件数据(指向同一i节点).有多少个目录项指向同一i节点,此i节点连接计数就等于多少. 如果仍然有人对文件系统的结构不太清楚,那么请看下面这2个图: 对上面几个概念的认识,让我们知道unix的文件系统的用户接口就是目录项,那么我们通过目录项访问文件的过程就应该是,内核根据目录项的i节点号找到对应的i节点,再通过i节点返回文件的属性,或者读取文件的实际数据内容.但为什么unix要采用三层结构(目录项--i节点--数据块)管理文件呢? 例如为什么不是直接将文件名放入i节点采用二层结构?这个相信大家自己不难理解. 二、unlink()函数 终于到unlink()函数了.很多人都知道unlink()的作用是删除文件,这是因为大多数时候一个文件只被一个目录项连接,而不知道实际上它的作用是仅仅是删除指定的目录项,以及将此目录项对应的文件的连接计数减一.如果还有其他的目录项连接到此文件,可以通过其他目录项读取文件内容.只有当文件的连接计数为0时,内核才将文件内容删除. #include #include #include #include int main() { int fd; char buff[30]; fd = creat("test1",777); if (fd == -1) { printf("creat file error!!\n"); return 1; } write(fd,"this is a test",30); close(fd); link("test1","test2"); /*新建一个连接到test1的目录项*/ system("ls"); /*查看是否有此2文件*/ unlink("test1"); system("ls"); /*查看是否将test1删除*/ fd = open("test2",O_RDONLY); if (fd == -1) { printf("open file error!!\n"); return 1; } read(fd,buff,30); printf("content of file test2: %s\n",buff); close(fd); return 0; } 但也有可能,一个文件的连接只有一个,但调用unlink之后,文件不存在了,磁盘空间却仍然没有得到释放.看下面这个例子: int main() { int fd; char buff[30]; fd = creat("test1",777); if (fd == -1) { printf("creat file error!!\n"); return 1; } fd = open("test1",O_WRONLY); if (fd == -1) { printf("open file error!!\n"); return 1; } write(fd,"this is a test",30); close(fd); system("df"); /*删除前打印出文件系统的磁盘空间使用情况*/ unlink("test1"); system("ls"); /*查看是否删除成功*/ system("df"); /*删除后打印出文件系统的磁盘空间使用情况*/ return 0; } 运行此程序你会发现删除前后磁盘空间完全没有变化,但ls时,文件确实已经不在了.这又是为什么呢?哦,你已经发现了,文件被打开2次,但只关闭了一次.问题就在这里,内核对于每个被打开的文件,保存有其打开的进程计数,关闭一个文件时,内核先检查其打开的进程计数,如果为0,再检查其连接计数,如果也为0,才会删除文件内容.当程序退出或返回,内核自动关闭所有被进程打开的文件,这就是为什么当程序运行结束后,再调用df查看时,磁盘空间已经释放的原因. unlink的这个特性也常被用来确保即使是在程序崩溃时,其所创建的临时文件也不会保存下来.在用open或creat创建一个文件之后,马上调用unlink(),这样因为文件仍然是打开的,所以内容不会被删除.而当程序退出时(正常或异常),内容就会被自动删除.

⑵ unix如何找头文件

#include <> 通常是用来加入系统中已有的的头文件的,编译器会优先搜索 “/usr/include"目录中的头文件消答蚂,如果没有再搜索当前目录

#include "" 通常是用来加入自定义的头文件,编译器在预处理的时候会优先搜索当前的目录,拿埋如果没有才会去“/usr/include”目录中找

两个用法举厅,区分的并不是特别的严格

不和C源文件在同一个目录中,需要用在include "" 中指定,存放,*.h文件的绝对路径即可

⑶ VS编译缺少unistd.h头文件

许多在linux下开发的C程序都需要头文件unistd.h,但VC中码核没有这个头迟唯掘文件,所以用VC编译总是报错。把下面的内容保存为unistd.h,可以解决这个问题。

unistd.h是unix std的意思,是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数山纤。 unistd.h在unix中类似于window中的windows.h

⑷ unix系统的头文件和库文件在哪里

默认编译器的头文件路径为 /usr/include
默认的动态库搜索路径/lib、/usr/lib

⑸ unistd.h头文件的作用或什么意思

#include <unistd.h>

是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数

#ifndef _UNISTD_H

#define _UNISTD_H

#include <features.h>

unistd.h含有灶冲的常量与函数:

ssize_t read(int, void *, size_t);

int unlink(const char *);

ssize_t write(int, const void *, size_t);

int usleep(useconds_t);

unsigned sleep(unsigned);

int access(const char *, int);

unsigned alarm(unsigned);

int chdir(const char *);

int chown(const char *, uid_t, gid_t);

int close(int);

size_t confstr(int, char *, size_t);

void _exit(int);

pid_t fork(void);

NULL /胡昌/ Null pointer

SEEK_CUR //隐做歼 Set file offset to current plus offset.

SEEK_END // Set file offset to EOF plus offset.

SEEK_SET // Set file offset to offset.

⑹ linux 的sleep()、usleep()、nanosleep()函数

原文地址: https://blog.csdn.net/weibo1230123/article/details/79139476

sleep()非系统调用,sleep()是在库函数中实现的,它是通过alarm()来设定报警时间,使用sigsuspend()将进程挂起在信号SIGALARM上。
sleep()只能精确到秒级上。sleep()会令目前的进程暂停,直到达到参数seconds 所指定的时间,或是被信号所中断。

return:若进程暂停到参数seconds 所指定的时间,成功则返回0,若有信号中断则返回剩余秒数。

除了时间单位为微秒以外,在使用上与sleep()差不多。还有就是实现也是不同的,sleep因为是用alarm实现的,所以时间单位为s ,而usleep的时间单位为us
,那肯定不是由alarm实现的,所以说它们的实现不同,但都是linux用的,而window下不能用,因为都是sleep和usleep都是在unistd.h下定义的。

return:若进程暂停到参数seconds 所指定的时间,成功则返回0,若有信号中断则返回剩余微秒数。

这个函数功能是暂停某个进程直到你规定的时间后恢复,参数req就是你要暂停的时间,其中req->tv_sec是以秒为单位,而tv_nsec以毫微秒为单位(10的-9次方秒)。由于调用nanosleep是是进程进入TASK_INTERRUPTIBLE,这种状态是会相应信号而进入TASK_RUNNING状态的,这就意味着有可能会没有等到你规定的时间就因为其它信号而唤醒,此时函数返回-1,切还剩余的时间会被记录在rem中。
return: 若进程暂停到参数 req所指定的时间,成功则返回0,若有信号中断则返回-1,并且将剩余微秒数记录在 rem中。

unistd.h 是 unix 系统标准头文件,用于系统调用,相当于win32中的windows.h,unistd.h 定义的函数只能用于UNIX环境中,而不能用于windows。所以sleep 和 usleep 只能用于linux下,而不能用于windows 。
nalosleep 和 其它时间日期操作函数一样都是定义在time.h中的,所以都适用

⑺ 本人是小白,请问UNIX书中./a.ou是什么文件,还有“apue.h“头文件是自己写的吗程序写在vi里怎么运行

  1. 关于./a.out

    以C语言为例,linux下假设有test.c文件,gcc编译后(不加-o)选差基项默认生成察庆凯的可执行文件名就是a.out,也就是说a.out文件是一个可执行文件。./a.out表示执行该可执行文件

  2. apue.h是自己写的,《UNIX环境高级编程》中附录B(677页)中有源码

  3. 假设你用vi编辑了一个test.c文件,计算机是无法直接读懂该文件的,细说的话要经过预处理、编译、汇编、链接等操作后才生成计算机能读懂的文件,也就是我刚才说的可执行文件那种。对于C初学者,你需要借助编译器gcc:

    $gcc test.c

    执行这个命令后再当前目录下执行ls,会发现多了一个a.out的可执行文件,然后执行./a.out就可以运行程序了。gcc可以加上-o选项,如:

    $gcc test.c -o test.exe

    -o选项表示指定生成文件败唤的名称。gcc还有很多选项,深入学习的话可以网络或者gcc -help之类的命令查看

⑻ Unix\Linux程序设计 中作者自己设计的头文件在哪里

http://proct.china-pub.com/301
找买的巧首粗光盘或者
电子书下芹含载孝镇

⑼ unix下gcc添加系统头文件搜索路径应该使用哪个选项

$ gcc -I XXX ......
-I参数代表添档渣加头文件搜索的哪蠢明路径,XXX是路径

此外环境变量$C_INCLUDE_PATH的值李告也会被自动加入编译过程

⑽ unix环境编程 头文件“apue.h”

是在apue.2e目录运行的make吗,我运行没问物答老题,只是罩升出现一个程序举手错误。

阅读全文

与unix头文件相关的资料

热点内容
黄石响应式网站建设多少钱 浏览:410
怎么把excel工作簿放到一个文件夹 浏览:949
wifi网络延时大怎么处理 浏览:345
云办公的原理是把传统文件放哪里 浏览:113
不属于群防群治队伍数据项有哪些 浏览:404
java树向上找 浏览:241
数据库查询票价 浏览:503
word黑色下划线怎么去掉 浏览:879
学习编程怎么学比较好 浏览:351
有什么好看的地图网站 浏览:593
oppo如何设置app黑名单 浏览:71
移动数据用了多少在哪里显示 浏览:549
excel表改变文件名颜色的方法 浏览:966
linuxshell二进制文件 浏览:36
什么是网络道德问题产生的 浏览:836
c清除文件夹 浏览:407
租房贷款用什么app 浏览:59
虚拟机oracle安装教程 浏览:745
太原编程班哪里有 浏览:544
压缩文件怎么找 浏览:586

友情链接