PHP笔记网

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2017-10-26 18:09:32  修改时间:2024-11-17 14:56:41  分类:13.C/C++/Rust  编辑
  fopen(打开文件)

定义函数

FILE * fopen(const char * path,const char * mode);

函数说明

参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。

mode有下列几种形态字符串:

r     打开只读文件,该文件必须存在。
r+   打开可读写的文件,该文件必须存在。
   打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a    以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+  以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。

返回值

文件顺利打开后,指向该流的 文件指针 就会被返回。若果文件打开失败则返回 NULL,并把错误代码存在 errno 中。

附加说明

一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。

范例

#include <stdio.h>

int main(int argc, char **argv)
{
	FILE *fp;
	fp = fopen("/Users/jianbao/ClionProjects/apue/123.c", "a+");
	if (fp == NULL)
	{
		printf("open fail\n");
	}
	else
	{
		printf("open success\n");
	}
    fclose(fp);

	return 0;
}
作者:Albert.Wen  添加时间:2016-01-28 10:08:04  修改时间:2024-11-19 22:26:14  分类:13.C/C++/Rust  编辑

gcc 是GNU Compiler Collection,原名为Gun C语言编译器,因为它原本只能处理C语言,但gcc很快地扩展,包含很多编译器(C、C++、Objective-C、Ada、Fortran、 Java),可以说gcc是GNU编译器集合。

g++ 是C++编译器。

cc 是 Unix系统的 C Compiler,一个是古老的 C 编译器。而 Linux 下 cc 一般是一个符号连接,指向 gcc;可以通过 $ ls -l /usr/bin/cc 来简单察看,该变量是 make 程序的内建变量,默认指向 gcccc 符号链接和变量存在的意义在于源码的移植性,可以方便的用 gcc 来编译老的用cc编译的Unix软件,甚至连 makefile 都不用改在,而且也便于 Linux 程序在 Unix下 编译。

CC 则一般是 makefile 里面的一个名字标签,即宏定义,表示采用的是什么编译器(如:CC = gcc)。

作者:Albert.Wen  添加时间:2015-10-26 11:07:06  修改时间:2024-11-18 01:02:35  分类:13.C/C++/Rust  编辑
作者:Albert.Wen  添加时间:2015-11-07 23:50:58  修改时间:2024-10-30 10:52:20  分类:13.C/C++/Rust  编辑

err_sys以及err_quit等函数不是C语言自带函数,是作者自己编写的函数。所以,想要运行书中的源代码,就必须自建一个头文件my_err.h把作者的代码拷贝进去,然后在程序中加载。

作者:Albert.Wen  添加时间:2019-09-04 11:26:35  修改时间:2024-10-31 16:41:40  分类:13.C/C++/Rust  编辑

在C语言中,如果一些函数被频繁的调用,不断地用函数入栈,即函数栈,则会造成栈空间或者栈内存的大量消耗,为了解决这个问题,特别的引入了inline关键字,表示为内联函数。

作者:Albert.Wen  添加时间:2017-10-26 14:47:44  修改时间:2024-11-07 12:35:45  分类:13.C/C++/Rust  编辑

popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了fclose()以外。

作者:Albert.Wen  添加时间:2017-10-26 17:36:50  修改时间:2024-10-31 11:25:01  分类:13.C/C++/Rust  编辑

一、gets() 函数详解

gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符('\n')不属于这个字符串

调用格式为:

gets(str);

其中str为字符串变量(字符串数组名或字符串指针)。

作者:Albert.Wen  添加时间:2017-10-26 14:23:06  修改时间:2024-11-14 17:38:16  分类:13.C/C++/Rust  编辑

 一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork() 函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

作者:Albert.Wen  添加时间:2017-10-26 14:07:02  修改时间:2024-10-31 09:04:50  分类:13.C/C++/Rust  编辑

“一切皆Socket!”

话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。

——有感于实际编程和开源项目研究。

作者:Albert.Wen  添加时间:2015-11-28 10:47:44  修改时间:2024-11-22 12:30:51  分类:13.C/C++/Rust  编辑

PHP_FE(array_max,NULL) 宏替换后:

// zend函数入口
const zend_function_entry helloworld_functions[] = {
    // PHP_FE(array_max,NULL)  // 此处和下面写法效果相等
    {
        "array_max", 
        zif_array_max, 
        NULL, 
        (zend_uint)(sizeof(NULL) / sizeof(struct _zend_arg_info) - 1), 
        0
    },
    PHP_FE_END    /* Must be the last line in helloworld_functions[] */
};