ubuntu下学习c语言
文章平均质量分 66
dark_tone
编程自学者,喜爱专研未知。
智商不够
展开
-
关于%取余的一些思考
在C语言中,取随机数rand()%n,获取0到n-1之间的整数, 如果是rand()%2那么值不是0就是1,不会有小数。#include <stdio.h>int main(){ int x; for (x=0;x<10;x++) { if(x%3==0) printf("x3= %d\n",x); if...原创 2019-10-15 10:32:37 · 436 阅读 · 0 评论 -
linux 系统编程 -- 进程间通讯IPC 管道(八)
因为在linux系啊,进程地址空间相互独立,所以进程和进程之间不能相互访问。要交换数据必须通过内核。有很多方法都可以完成这类功能,比如文件、管道、命名管道、信号、共享内存、消息队列、套接字等,随着技术的发展,有些方法已经被淘汰。现今最常用的方法是:① 管道 :使用最简单,传递数据量较小 ,本机程序。②信号:开销最小③共享内存: 无血缘关系,相对复杂④套接字:难度最高,最稳定,传递大量数据...原创 2019-05-02 09:50:47 · 123 阅读 · 0 评论 -
linux 系统编程 -- 信号及信号处理(四)
概念信号是一种软件中断,它提供了一种处理异步事件的方法,也是进程间唯一的异步通信方式。信号的来源:①硬件方式:按键会产生信号,比如ctrl+c组合键,产生一个SIGINT信号;硬件异常信号,比如除数为0,无效存储访问,由cpu通知内核,内核生成相应信号。②软件方式: 用户在终端下调用kill命令向进程发送任意信号;进程调用kill或sigqueue函数发送信号;当某种条件已经具备时发送信号...原创 2019-04-23 11:41:49 · 334 阅读 · 0 评论 -
linux 系统编程--系统调用概念,出错处理(一)
铁律无论何时,只要执行了系统调用,都要检查调用的返回状态以确定是否调用成功!概念系统调用是内核入口,借助于这一机制,程序员可以请求内核去执行某些动作,称为应用程序编程接口API。无论是linux还是windows,这一概念并没有区别。① 系统调用将处理器从用户态切换到核心态,以便cpu访问受到保护的内核内存。② 系统调用的组成是固定的,每个系统调用在内部都有一个唯一的数字来标识。③ ...原创 2019-04-20 03:02:22 · 429 阅读 · 0 评论 -
linux 系统编程--文件I/O读写(二)
linux系统设计的核心理念在于文件。文件包含两方面的内容,一是文件本身所储存的数据,二是文件的属性,包括文件的访问权限、所有者、文件大小、创建日期等。从左到右依次是文件属性(目录也是文件),文件数量(子目录数),所有者,用户组,文件大小,文件创建时间,文件名。linux中文件类型:①普通文件(regular file):最常见的类型,至于是文本还是二进制,对内核并无区别。第一个属性是...原创 2019-04-20 07:17:37 · 293 阅读 · 0 评论 -
linux 系统编程 --cpu与指令的工作流程,MMU,环境变量(六)
单道程序设计:一段时间只有一个程序在运行。多道程序设计:时钟中断是硬件基础,让多道程序设计的理论得以实现,多个程序轮流使用cpu(时间片),当下常见的cpu为纳秒级,而人眼的反应速度是毫秒级,所以看似在同时运行。实质上,并发是宏观,微观依然是串行。MMU在cpu内部,以page为单位,在32位机上,一个page就是4k。它主要完成两个工作,其一是把虚拟内存映射到物理地址,其二是设置内存访...原创 2019-04-30 11:14:50 · 212 阅读 · 0 评论 -
linux 系统编程 --再谈进程(七)
经典linux把进程分为5个状态,运行态,停止态,等待态(两种),僵死态。还有一种划分法: 就绪态,运行态,挂起态,停止态。原创 2019-05-01 08:23:25 · 218 阅读 · 0 评论 -
linux 系统编程 --网络通讯基础知识 (十)
协议就是一种提前约定好的规则。c/s模式: 客户端/服务器模式。优点:协议选择灵活,完全可以使用自定义的协议; 能够通过客户端预先缓冲数据,适合中大型的项目;稳定性较高缺点: 因为需要额外下载客户端,对用户安全构成威胁(不知道客户端在干什么);开发工作量相对较大,需要开发服务器和客户端两类程序。跨平台性不好。b/s模式: 浏览器/服务器模式优点: 不需要额外下载客户端,使用自带浏览器; ...原创 2019-05-07 23:17:00 · 183 阅读 · 0 评论 -
linux 系统编程 --socket 服务器端(十一)
struct sockaddr 结构体,早期网络编程函数都是基于该结构体,但是随着技术的发展,ipv4协议诞生,为了向前兼容,现在sockaddr退化成了void * 作用的指针,内部会强制类型转换为所需的地址类型(sockaddr_in或者sockaddr_un或者scokaddr_in6)sockaddr_in代表AF_INET,ipv4协议,sockaddr_un代表AF_UNIX,sco...原创 2019-05-27 01:08:19 · 118 阅读 · 0 评论 -
linux 系统编程 --socket 客户端(十二)
把服务器端的程序稍加修改,就可以形成客户端:#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <stdlib.h>#include <sys/socket.h>#include <arpa/inet.h>#include <...原创 2019-05-27 02:16:47 · 114 阅读 · 0 评论 -
linux 系统编程 -- 尝试编写who命令(五)
who命令可以显示出登陆的用户和时间等信息。它的工作原理是读取/var/run/utmp文件再利用man -k utmp来搜索,知道跟它密切相关的应该是man 5 utmputmp文件记录了当前一部分正在使用系统的用户信息,但是它不是所有的用户,有些程序不在utmp文件中登记。该文件在头文件utmp.h中定义了一个结构体来存储信息 #define UT_LIN...原创 2019-04-27 08:14:56 · 280 阅读 · 0 评论 -
第14章--打开文件和随机移动文件指针的一些要点
新建一个test文件,内容如下:系统显示因为每一行都有不可显的字符\r\n但是用c语言编程打开该文件,并统计显示:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <conio.h>int main(int arc, char *a...原创 2019-04-17 00:56:40 · 164 阅读 · 0 评论 -
个人的vim入门
从网络上下载了vim用户中文手册7.3版本。 对开篇的译者前言深以为然,并摘抄如下: 不要试图从本手册中获取什么知识,使用vim更多是一种技能而不是一种知识,vim的学习需要双手而不是头脑。 经常按照书中的指示进行示例性操作。在学习过程中,不要贪图一下子全都掌握,最好是看到一条技巧后,马上在编辑器里进行操作。如果读者手边没有一个合适vim环境可供练习,那么建议读者还是不要在这里浪费时间。原创 2016-08-22 00:42:36 · 679 阅读 · 0 评论 -
《c primer plus》第一个程序first.c的编辑,编译与输出
参考书籍为《c primer plus》 本书第一章概览,从第二章正式启动。 首先创建文本first.c 不要忘记按a切换模式,输入书上的源代码。 输入完成后,按ESC键切换模式,输入:wq保存退出。 信心满满的在终端进行编译 :gcc first.c 果然眼高手低,一大堆错误。 重新用vim first.c打开文件编辑,编辑完成后不要忘记:wq保存退出! 这次顺利通过原创 2016-08-22 05:54:25 · 1004 阅读 · 0 评论 -
让程序清晰可读,并在vim中设置行号
源代码是写给人看的,或许是别人,或许是自己。 尽管first能够完成工作,但让程序清晰可读是一个良好的编程习惯,它不光易于理解,而且可以更容易的修改。 所以对first.c源代码进行改进,让程序更加清晰可读。 1. 选择有意义的变量名。 2. 使用注释。 3. 使用空行,空格等分割程序概念上的多个部分。 4. 每个语句只用一行。 第1项和第4项已经做到了,需要依据第2项和第3项改进。原创 2016-08-22 06:31:38 · 383 阅读 · 0 评论 -
前置知识----在ubuntu下如何进行c语言开发
有了编译链接的编程基础知识后,如何在ubuntu下进行c语言开发学习呢? 如果把这个概念再扩大,不仅限于c语言,c++,python ,object c等等语言的程序开发,又应该如何进行? 目前编程开发比较流行的做法分成三个大类: 1. 文本编辑器(比如vim),配合各语言独立的编译器,比如vim+gcc,vim+g++,vim+python 2. 使用IDE,比如 code b原创 2016-08-22 00:07:56 · 601 阅读 · 0 评论 -
第三章 数据和C(一)
计算机可以做很多事,比如数值计算,名字排序,执行语音或视频命令,计算彗星轨道,准备邮寄列表,拨电话号码,画图,做决策以及任何其他可以想象到的事情。要完成这些任务,程序需要数据,即承载信息的数字与字符。个人感想:“一切都围绕着数据,枯燥的数字或者字符,其本质蕴涵着信息,数据既是信息。怪不得有个经典表述——程序=数据+算法。 前者是信息,后者是对信息的处理,提取出对我们有用的部分”。数据类原创 2016-08-24 00:02:22 · 303 阅读 · 0 评论 -
第三章 数据和C(二)
字符char,虽然存储的是字幕和标点符号,但技术上的实现确是整数类型。 有两种原因: 1. 计算机内部不可能存储字母,所有的都是二进制数据。 2. 文本文件结束标志符EOF,经常被定义为整数-1。文本肯定都是字母和标点组成。 标准ascⅡ码范围从0到127,用8位的整数来表示足够了,char类型应运而生。 后来计算机发展,为了能表示全世界所有语言的字母或标点,unicode标准诞生。原创 2016-08-23 10:14:46 · 231 阅读 · 0 评论 -
第4章至第11章要点记录
sizeof操作符,它以字节为单位给出数据大小。strlen()函数以字符为单位给出字符串的长度。 因为一个字符只占用一个字节,所以可能认为这两个操作会得到相同的结果,事实并非如此。 见程序praise2.c 创建常量的三种方式: #define const 枚举。 深入了解一下printf和scanf。 它们称为转换函数更加准确。 键盘输入的是文本,当你项输入整数2原创 2016-08-24 05:57:12 · 332 阅读 · 0 评论 -
第13章 文件读写的相关要点记录--二进制与文本文件
计算机系统中文件占有非常重要的地位,所有的程序、文档、数据、信件、表格、图片等等种类繁多的信息,都是用文件来保存的。 c语言将文件看成是连续的字节序列——字节流。 换句话说,在操作系统内部,unix like 系统仅有一种文件结构,文本与二进制实现是相同的。 因此使用fopen , ”r ” ” rb ”, “w” “wb ”,是一样的。 而给人看的部分,分成了文本视觉与二进制视觉原创 2016-08-25 06:09:35 · 288 阅读 · 0 评论 -
linux系统编程--进程概念与创建(三)
概念多用户多任务的操作系统,必须对程序能够并行执行。核心的概念就是进程,或者说进程是操作系统资源管理的最小单位。操作系统通过进程来管理计算机的软,硬件资源。进程和程序的区别: 进程是动态的实体,是程序的一次执行过程;程序是静态的,是保存在硬盘上的代码。线程: 在进程内又划分了许多线程,它是比进程更小的,能独立运行的基本单位。它与同一个进程中的其他线程共享进程的全部资源。进程在执行过程中...原创 2019-04-21 06:35:25 · 141 阅读 · 0 评论 -
第12章作用域、存储类与链接要点记录
代码块作用域只局限于该代码块,但可以人为规定是自动存储或者静态存储。 文件作用域的变量从它定义处到文件结尾都是可访问的,内部链接就是仅该文件本身可用;外部链接不光自己可用,其他文件都可用。 静态存储就是变量在程序执行期间一直存在,至于能不能访问那是另一回事。 换句话说,作用域和链接属性决定了变量的访问权限,自动/静态存储决定了变量的值要不要保留。 剩下的事情无非就是这3种属性的组合。原创 2016-08-25 03:58:48 · 250 阅读 · 0 评论