Yesterday I helped my friend install Ubuntu (14.04 LTS) on his PC where there has been a MS Win10.
I used UltraISO to create a U-disk installation and installed it.
However, then we could only start up Ubuntu and there was no Win10.
Then we use LaoMaoTao software to rescue Win10's loader, while the Ubuntu disappeared.
Then we use EasyBCD on Win10 to add an Ubuntu loader.
Bingo!
Here is a helloworld.c:
#include <stdio.h>
int main()
{
printf("Hello, world\n");
return 0;
}
gcc -o helloworld helloworld.c
Then I want to change the string "Hello, world" to "hello, world".
Here is :
vim helloworld -b # -b means binary
:%!xxd # observe in hex mode
# move cursor to letter 'H' and change it to 'h'
:%!xxd -r # recover from text to binary
:wq
bingo!
Here is an interesting question that how can I get the file size in Linux environment.
Method.1
#include <stdio.h>
FILE *fp = fopen(filename, "r");
if(!fp)
return -1;
fseek(fp, 0L, SEEK_END);
int size=ftell(fp);
printf("size is %d\n", size);
fclose(fp);
However, this method must load the whole file into memory. If the file is very large, its speed will be ridiculous!
Method.2
#include <sys/stat.h>
#include <stdio.h>
struct stat statbuf;
int state = stat(filename, &statbuf);
if(state < 0)
return -1;
int size = statbuf.st_size;
printf("size is %d", size);
Bingo!
Today my friend want to install Win7. I use a U-disk with LaoMaotao software and Win7 GHO. However, his disk is GPT mode.
The Win7 should be installed in MBR mode by default.
So we use LaoMaotao to change the disk into MBR mode.
P.S. Maybe we should also study how to install Win7 in GPT mode for the reason that GPT will be in fashion from now on.
bingo!
Today I use Vim to create a text file and store it. Then I use 'xxd' to observe that file. Here is a '\x0a' at the end of the text.
And gedit will do so. Somebody says that is because of the canonical mode in Linux.
Today my friend uses Vi to edit a text. However he can't use to delete letters.
Here is the solution(Copy from Internet):
set nocompatible
set backspace=indent,eol,start
Today I read CSAPP Chapter-8 and follow it to make a simple shell.
Here's the code:
if(pid == 0){ // child runs user job
if(execve(argv[0], argv, environ) < 0){
printf("evecve error: %s\n", strerror(errno));
printf("%s: Command not found.\n", argv[0]);
}
}
However, I can't use [echo "hello,world"] to execute [echo] instruction.
I must use [/bin/echo "hello,world"]. I have deliver the environment variables into the sub-process.
So, how can that thing happen?
After searching on the Internet, I know it.
[execve] belongs to a [exec] family. And there are some suffixes:
Here are some functions:
For the small shell above, we should use [execvpe] to replace [execve].
P.S.
for more details, please refer to [man execl] in Linux.
bingo!