1. 线程执行顺序问题 #include <stdio.h> #include <string.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> void *thread1(void *); void *thread2(void *); pthread_key_t key; void *thread1(void *arg){ int a = 1, *tsd = &a; pthread_t thid2; printf("thread1 %lu is running\n", pthread_self()); pthread_setspecific(key, tsd); pthread_create(&thid2, NULL, thread2, NULL); sleep(3); //---2 继续阅读 >>


王良 17/08/02 23:53:10
1. Find The Multiple ( POJ 1426) Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there is a corresponding m containing no more than 100 decimal digits. Input The input file may contain multiple test cases. Each line contains a value of n (1 <= n <= 200). A line containing a ze 继续阅读 >>


王良 17/07/30 20:43:04
1. 执行新程序 只列出几个常用的函数: #include <unistd.h> int execve(const char *path, char * const argv[], char * const envp[]);//envp[]为环境变量,可直接调用 int execv(const char *path, char * const argv[]);//与execve()类似 int execvp(const char * path, char * const argv[]);//path新程序的名称   正常情况下,这些函数不会返回,因为进程的执行映像已经被替换,没有剖接收返回值的地方。若发生错误,则返回-1.   新程序的进程保持了原来进程的进程ID、父进程ID、实际用户ID和用户组ID。同时,调用新程序后,原有的子进程的映像被替代,不再被执行。 2. 等待进程结束 #include <sys/types.h> #include < 继续阅读 >>


王良 17/07/29 22:44:44
1. fork #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> int main (void) { pid_t pid; int i = 3; pid = fork(); switch(pid){ case 0: while(i--){ printf("A background process, PID:%d, ParentID:%d\n", getpid(), getppid()); } sleep(1); break; case -1: perror("Process creation failed.\n" 继续阅读 >>


王良 17/07/27 11:58:06
一、 文件操作 1、 获取文件属性 #include<sys/types.h> #include<sys/stat.h> #include<unistd.h> int stat(const char *filename, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *filename, struct stat *buf); 部分常用结构体成员: st_mode : 文件的类型和存取权限 st_nlink : 文件硬连接数目 st_uid : 文件所有者的用户id st_gid : 文件所有者的组id st_size : 文件大小 st_mtime : 文件最后修改时间 st_atime : 文件最后访问时间 st_ctime : 文件最后(文件所有者、所有组、权限)更改时间 继续阅读 >>


王良 17/07/22 22:58:55
1. Lowest Common Multiple Plus 求n个数的最小公倍数。 Input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。 Sample Input 2 4 6 3 2 5 7 Sample Output 12 70 该题只要按顺序向每两个求最小公倍数即可,并将所得倍数与下一个数字再进行运算求最小公倍数,循环最终得到所需值。 虽然原题说可以假设最后的输出是一个32位的整数,但是在中间运算过程中,可能会存在溢出问题,例如a * b可能会溢出,因此可以用a / gcd(a, b) * b来代替a * b / gcd(a, b),或者直接将定义long long a, b避免溢出。 //第一种 #include <stdio.h> int gcd(int a, int b){ int x; if(a & 继续阅读 >>


王良 17/07/19 12:26:03
1. Lowest Common Multiple Plus 求n个数的最小公倍数。 Input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。 Sample Input 2 4 6 3 2 5 7 Sample Output 12 70 该题只要按顺序向每两个求最小公倍数即可,并将所得倍数与下一个数字再进行运算求最小公倍数,循环最终得到所需值。 虽然原题说可以假设最后的输出是一个32位的整数,但是在中间运算过程中,可能会存在溢出问题,例如a * b可能会溢出,因此可以用a / gcd(a, b) * b来代替a * b / gcd(a, b),或者直接将定义long long a, b避免溢出。 //第一种 #include <stdio.h> int gcd(int a, int b){ int x; if(a & 继续阅读 >>


王良 17/07/19 12:26:03
邮箱验证 POJ 注册的时候需要用户输入邮箱,验证邮箱的规则包括: 1)有且仅有一个'@'符号 2)'@'和'.'不能出现在字符串的首和尾 3)'@'之后至少要有一个'.',并且'@'不能和'.'直接相连 满足以上3条的字符串为合法邮箱,否则不合法, 编写程序验证输入是否合法 Input 输入包含若干行,每一行为一个代验证的邮箱地址,长度小于100 Output 每一行输入对应一行输出 如果验证合法,输出 YES 如果验证非法:输出 NO Sample Input .a@b.com pku@edu.cn cs101@gmail.com cs101@gmail Sample Output NO YES YES NO 本题原本不难,结果因为读题及对题意理解不清,导致被卡了很久。 首先说理解误区,原题说的是'@'不能和'.'直接相连,然而只考虑了@.这种相邻的情况,而忽视了。@这种相邻的情况,(实力打脸……)。 剩余的问题就是按照其要求寻找不符合的情况,开始用的 继续阅读 >>


王良 17/07/18 12:29:17
该部分将作为日常学习的总结,内容将会比较杂乱,只有整体上的主题——文件操作。 主要目录的存储内容 /bin 全称binary, 存放普通用户可执行的命令 /boot 存放Linux内核及开机启动的相关文件 /etc 存放系统的配置文件 /usr 存放系统应用程序及相关文件 /tmp 存放临时文件 /sbin 存放管理系统的命令 /lib 存放各种库文件 /dev 存储设备文件 open函数及其参数 1) 头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 2) 参数 O_RDONLY 只读 O_WRONLY 只写 O_RDWR 可读可写 O_CREAT 若文件不存在则建立文件 O_EXCL 若文件已存在,则打开错误 O_TRUNC 若文件存在且可写,则清空文件 creat 继续阅读 >>


王良 17/07/17 21:55:00
在做课设时,因为在windows上写了一个输入密码时屏幕显示为***的函数,但是在移植到linux系统上时却有问题,提示有错误。 上网搜索,有人说getch()函数的头文件是curses.h,还有人说是conio.h, 但是在ubuntu系统中都不能使用,再次搜索发现getch()函数并非c标准库函数,所以可能在其他系统中不支持。 因此找到了getpass()这一函数,实现在linux上密码隐藏输入的问题。其所在头文件为<unistd.h>。 getpass()函数的返回值为所输入字符串的首地址,参数可以为想要在屏幕上显示的提示信息。(看到这里感到很惊奇,在c语言中竟然还有和python中差不多的函数,参数可以是提示信息!!!) 而且该函数同样也支持删除已输入的错误字符的功能,确实减少了编程时的麻烦^_^. 代码如下: #include <stdio.h> #include <unistd.h> int main (void) { char *ch 继续阅读 >>


王良 17/07/04 22:42:37