unix高级环境编程-基础知识

  对于一个从C#转向Linux/unix系统开发的菜鸟,中间无数次的焦头烂额只有自己心理明白,所幸我没有在大风大浪中凋零破碎,依然坚挺着我的学习之路。

  Unix操作系统结构:

  UNIX ,是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson、DennisRitchie和DouglasMcIlroy于1969年在AT&T的贝尔实验室开发。

   严格意义上讲,可将操作系统定义为一种软件,可以直接控制硬件资源,提供程序运行环境,我们可以称之为内核。内核的接口可以称为系统调用,公用函数库建立在系统调用之上,应用软件既可以使用公用函数库也可以使用系统调用。shell是一种特殊的应用程序,它为运行其他应用程序提供接口。

   广义上讲,操作系统也包括内核和其他的一些软件。

 文件系统和目录

 文件系统:

   Unix文件系统是目录和文件组成的一种层次结构,目录的起点称为根(root) 使用./符号表示,目录(directory)是一个包含许多目录项的文件,逻辑上讲,可以认为i每一个目录都包含一个文件名,同时还包括文件的属性信息。文件的属性是指文件类型,文件大小,文件所有者,文件权限 以及文件最后修改时间。

 文件名:目录中各个名字称为文件名,斜线和空操作符不能出现在文件名中,在创建新的目录时候,系统会自动创建2个文件名 .和..

 路径名:一个或多个以斜线分割的文件名序列构成路径名,以斜线开头的称为绝对路径,否则称为相对路径

 18 #include <dirent.h>19 int main(int argc,char** argv)20 {  21      DIR   *dp;22      struct dirent *dirp;23     if(argc != 2)24     {25         err_quit("usage:is directory_name");26     }27     if(dp = opendir(argv[1] == NULL)28         err_sys("can`t open %s ",argv[1]);29     while((dirp = readdir(dp))!= NULL)30         printf("%s\n",dirp->d_namlen);31    32     closedir(dp);33     exit(0);34 }

 

工作目录:

  Unix下每一个进程都有一个工作目录,或者可以称为当前工作目录,所有的相对路径都是从工作目录开始的。


输入和输出

    标准输入,标准输出和标准出错,所有的shell都会为每一个新运行的进程打开三个文件描述,大多数shell都提供一种方式,使其中任何一个或者三个,例如:ls -> file.list 执行命令后,标准输出重新定向到file.list中

不用缓存的IO  

  函数open,read,write,lseek以及close提供不用缓存的I/O,这些都使用文件描述

 

 #define BUFFSIZE 409622           23 int main(void)24 {         25     int n;26     char buf[BUFFSIZE];27     while(n = read(STDOUT_FILENO,buf,BUFFSIZE) >0)28     {     29         if(write(STDIN_FILENO,buf,n) != n)30         {       31             err_sys("write err\n");32         }33         if(n < 0)34         {    35             err_sys("read_err\n");36         }37         exit(0);

 标准I/O

   标准I/O函数体on个一种对不用缓冲的额函数的带缓冲的接口,使用标准I/O函数可以无需担心如何选取最佳的缓冲区大小,使用标准I/O函数的另外一个优点是简化了对输入行的处理,如Fgets函数读取完整的一行,而read函数读取指定的字节,标准I/O函数库提供了使我们能够控制该库所使用的缓冲风格函数。

  

 18 #include <stdio.h>19 int main(void)20 {    21     int c;22     while(c =getc(stdin) != EOF)23     {                      24         if(putc(c,stdout) == EOF)25             err_sys("output error");26         if(ferror(stdin))27             err_sys("input error");28         eixt(0);29     }   30 }   

 函数getc一次读取一个字符,然后函数putc将此字符标准输出

 

 

转载于:https://www.cnblogs.com/gaowenbin/archive/2012/04/26/2471516.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oh,我这个大佬盆友教我整机器学习

这个项目是我一个盆友的毕业设计&#xff0c;他的设计在这项目基础上新增了功能&#xff0c;晚上我们在这部分讨论了很久&#xff0c;在机器学习领域这个项目不算高深&#xff0c;但对于我们初学者&#xff0c;想了解机器学习是个什么鬼东西的我们来说帮助很大。https://github…

MailMail升级到1.0.2.4

修正一处会导致异常的逻辑错误 手动添加收件人地址时&#xff0c;如果地址已存在&#xff0c;将获得提示。 增加收件人地址导入功能&#xff0c;可以从一个或多个文件中导入收件人地址。 增加收件人列表导出功能 为避免干扰滚动条的使用&#xff0c;双击打开添加附件对话框的功…

QT事件的接受与忽略

转载&#xff1a;http://blog.csdn.net/gusgao/article/details/48862391 首先来看一段代码&#xff1a; //!!! Qt5 // ---------- custombutton.h ---------- // class CustomButton : public QPushButton {Q_OBJECT public:CustomButton(QWidget *parent 0); private:void…

导师问我打开句柄fd和没有打开的差异在哪里?

大家好昨晚看到一个同学在群里提问&#xff0c;想简单回答这个问题&#xff0c;我的答案可能不是最全面的&#xff0c;文章最后的两篇技术文大家可以看看&#xff0c;大家也可以说下自己的看法。fd的发明我觉得是计算机的一个壮举&#xff0c;因为对于应用程序来说&#xff0c;…

.net数据绑定控件中的数据导出到Excel

在做审计局内部系统时&#xff0c;数据需要导出到Excel&#xff0c;在网上找了些代码&#xff0c;成功的完成了此功能 在html代码第一行中添加EnableEventValidation"false" <% Page Language"C#" AutoEventWireup"true" EnableEventValidat…

汇编调用c函数为什么要设置栈

一.栈的整体作用 (1)保存现场/上下文 (2)传递参数:汇编代码调用c函数时&#xff0c;需传递参数 (3)保存临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。 二.为什么汇编代码调用c函数需要设置栈 之前看了很多关于uboot的分析&#xff0c;其中就有说要为C语…

C++之Boost准标准库配置

下载安装 进入官网下载地址&#xff1a;https://www.boost.org/users/download/ 本教程直接下载官方已编译库&#xff0c;不涉及源代码手动编译 点击官方编号好的链接&#xff0c;然后进入一个下载地址&#xff1a;https://sourceforge.net/projects/boost/files/boost-binarie…

给.net初学者的一些建议(共勉之)[转载]

.不要以为.net就需要把代码全部写到.cs页面,不屑于使用vs提供的方便的控件操作. .不要以为.net就是把各种控件往页面上一拖,然后通过vs方便的设置一下就ok. .不要以为.net就需要在一开始从编译原理到web服务各种各样的书都看上一遍 .不要以为.net就是直接打开vs建立页面然后闷头…

大小端模式 续

union w { int a; char x[2]; }e; e.x[0]10; e.x[1]1; cout<<e.a<<endl; 那么运算结果在little-endian模式中的结果为266,那么原因是什么呢 我个人的理解 小端模式下&#xff1a; printf("0x%x", e.a); 结果为0x10a 大端模式下&#xff1a; printf("…

利用HTML中的XML数据岛记录浏览

html文件&#xff1a;shop.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <me…

1.5

C Concurrency in Action Anthony Williams Chapter 1. Hello, world of concurrency in C! 1.1 What is concurrency? 1.1.1 Concurrency in computer systems 1.1.2 Approaches to concurrency 1.2 Why use concurrency? 1.2.1 Using concurrency for separation of concer…

测试一下你对IP地址的掌握水平(网管面试时会用到)

以下内容摘自《网管员面试宝典》一书。测试一下你对IP地址的理解能力&#xff0c;大家先不看题后的解答&#xff0c;看自己能做出多少题。网管面试时会用到的。面试题1&#xff1a;以下说法正确的是&#xff08; &#xff09;。A. C类地址就是局域网用的IP地址 B. A类地址的网…

中秋的秋

又是一年中秋中秋是比较特别的节日&#xff0c;因为每一年的中秋&#xff0c;我和小云总是能遇到各种事情而分开「当然今年不会」。去年的时候&#xff0c;我们因为要赶项目&#xff0c;所以中秋申请了加班&#xff0c;要申请加班的那天我还是挺不情愿的&#xff0c;然后旁边的…

OpenSSL原理与实现

1. 概念 1.1. SSL&#xff08;Secure Sockets Layer安全层套接字&#xff09;/TLS&#xff08;Transport Layer Security传输层套接字&#xff09;。 最常见的应用是在网站安全方面&#xff0c;用于http数据传输的加密。 1.2. 安全的目标&#xff1a;保密性&#xff08;confide…

shell的debug模式

如何调试shell脚本&#xff1f; 在指定shell运行版本时加上 -x #!/bin/bash -x ➜ demo git:(master) ✗ cat debug.sh #!/bin/bash -xecho "hi" date sleep 1 echo "hi" date调试结果&#xff1a; ➜ demo git:(master) ✗ ./debug.sh echo hi hidat…

C++ 重载(overload)、重写(overrride)、重定义(redefine)总结

昨晚打开论坛&#xff0c;看到有朋友问了一个关于虚函数的问题&#xff0c;因为头太疼了&#xff0c;所以今天中午起床再看。 问题传送门&#xff1a;http://www.cppleyuan.com/viewthread.php?tid7923 C的一些特性好久没使用了&#xff0c;导致有些生疏了&#xff0c;所以查了…

工作和异地,都是生活的考验

12年毕业的我&#xff0c;应该没有人比我更懂异地恋了。12年毕业拿了一份上海的ARM底层开发offer&#xff0c;薪资不算高&#xff0c;不过我们那一年竟没有一个拿到比上一届师兄薪资好的offer&#xff0c;我那时心里郁郁发闷&#xff0c;女朋友那时候考公务员&#xff0c;我们没…

strdup与strcpy具体的区别

我分别在XP的环境和linux环境下编译运行C代码&#xff0c;我发现一个不解的现象&#xff1a; 现象描述&#xff1a; 两个字符串 char* from&#xff0c; char* to;要把from的内容复制给to。 我在XP下&#xff0c;用strcpy&#xff08;to&#xff0c; from&#xff09;出现memor…

go语言基础之工程管理和工作区介绍

1、工程管理 在实际的开发工作中&#xff0c;直接调用编译器进行编译和链接的场景是少而又少&#xff0c;因为在工程中不会简单到只有一个源代码文件&#xff0c;且源文件之间会有相互的依赖关系。如果这样一个文件一个文件逐步编译&#xff0c;那不亚于一场灾难。 Go语言的设计…

用临时表的GridView分页

本例子采用sql2000下的Nowthwind数据库中的[Order Details]表 下面是存储过程脚本 Code1ALTER PROC OrderDetailsPaging 2(PageIndex int,--页码 3 PageSize int,--页尺寸 4 RowsCount int output)--总行数 5AS 6BEGIN 7set nocount on 8declare PageLowerBound int 9declar…